JavaScript标准参考教材(alpha)--笔记

一、导论

二、基本语法

1、严格来说var a=1与a=1效果不太一样,delete命令无法删除前者。

JavaScirpt是一种动态类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值。

JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。中文是合法的标识符,可以用作变量名。

switch语句后面的表达式与case语句后面的表示式,在比较运行结果时,采用的是严格相等运算符(===)。swidth结构不利于代码重用,往往可以用对象形式重写。

do...while语句中,while后的分号不能省略。

typeof(null)==‘object‘,typeof(undefined)==‘undefined‘,null==undefined,null转数值是0,undefined转数值是NaN。 
    2、JavaScript内部,所有数字都是以64位浮点数形式储存,

+0===-0,唯一有区别的场合是,+0-0当作分母,返回的值是不相等的,0/0返回NaN,NaN类型number,NaN===NaN为false。isFinite函数返回一个布尔值,检查某个值是不是正常数值,而不是Infinite。

3、Base64是一种编码方法,可以将任意字符转成可打印字符。使用这种编码方法,主要不是为了加密,而是为了不出现特殊字符,简化程序的处理。btoa():字符串或二进制值转为Base64编码,atob():Base64编码转为原来的编码。要将非ASCII码字符转为Base64编码,必须中间插入一个转码环节encodeURIComponent(str),再使用这两个方法。

4、对象中键名不符合标识名的条件,则必须加上引号。JavaScript的保留字可以不加引号当作键名。

如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。但是,这种引用只局限于对象,对于原始类型的数据则是传值引用,也就是说,都是值的拷贝。

检查变量是否声明:if(‘a‘ in window){}else{}。

查看所有属性:Object.keys(o)。

delete命令只能删除对象本身的属性,无法删除继承的属性,不能删除var命令声明的变量,只能用来删除属性。

with的作用是操作同一个对象的多个属性时,提供一些书写的方便。

5、任何类型的数据,都可以放入数组。将数组清空的一个有效方法,就是将length属性设为0。

数组的slice方法将类似数组的对象,变成真正的数组:Array.prototype.slice.call(arrayLike)。

数组的某个位置是空位,与某个位置是undefined,是不一样的。如果是空位,使用数组的forEach方法、for...in结构、以及Object.keys方法进行遍历,空位都会被跳过。

6、JavaScript引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会像变量声明一样,被提升到代码头部。如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。

对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量。

如果函数A调用函数B,函数B不会引用函数A的内部变量。函数体内部声明的函数,作用域绑定函数体内部。

函数参数如果是原始类型按值传递,如果是复合类型按地址传递,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。

闭包就是函数能够读取其他函数内部变量的函数。闭包作用:读取函数内部变量,让这些变量始终保存在内存中,封装对象的私有属性和私有方法。

7、否运算(~)

8、Number:调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。如果valueOf方法返回的还是对象,则改为调用对象自身的toString方法。如果返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。如果toString方法返回的是对象,就报错。

String:先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。如果toString方法返回的是对象,再调用valueOf方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。如果valueOf方法返回的是对象,就报错。

Boolean:undefined null -0 0或+0 NaN ‘‘(空字符串)为false,其余为true。

9、Error构造函数,所有抛出的错误都是这个构造函数的实例。

原生错误类型:SyntaxEror(语法错误),ReferenceError(引用一个不存在的变量),RangeError(值超出范围),TypeError,URIError,EvalError。

如果没有发生错误,则运行finally代码块关闭文件;一旦发生错误,则先使用catch代码块处理错误,再使用finally代码块关闭文件。

10、避免使用全局变量。如果不得不使用,用大写字母表示变量名。

所有函数都应该在使用之前定义,函数内部的变量声明,都应该放在函数的头部。

建议使用Object.create()命令,替代new命令。

不要使用“相等”(==)运算符,只使用“严格相等”(===)运算符。

建议自增(++)和自减(--)运算符尽量使用+=-=代替。

建议避免使用switch...case结构,用对象结构代替。

三、标准库

1、Object.keys方法只返回可枚举的属性,Object.getOwnPropertyNames方法还返回不可枚举的属性名。

var type = function (o){var s = Object.prototype.toString.call(o);return s.match(/\[object (.*?)\]/)[1].toLowerCase();};比typeof更准确。

2、concat方法返回当前数组的一个浅拷贝。所谓“浅拷贝”,指的是如果数组成员包括复合类型的值(比如对象),则新数组拷贝的是该值的引用。

push方法还可以用于向对象添加元素,添加后的对象变成类似数组的对象,即新加入元素的键对应数组的索引,并且对象有一个length属性。[].push.call(a,1)。

slice方法的一个重要应用,是将类似数组的对象转为真正的数组。Array.prototype.slice.call({...})。

map方法对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。map通过call方法还可以用于字符串。

3、valueOf()返回包装对象实例对应的原始类型的值。toString()返回实例对应的字符串形式。

原始类型的值,可以自动当作对象调用,即调用各种对象的方法和参数。这时,JavaScript引擎会自动将原始类型的值转为包装对象,在使用后立刻销毁。

4、Number:toString(),toFixed()小数位数,toExponential()科学计数法,toPrecision()指定位数的有效数字。

5、String:用slice代替substring。search方法的用法等同于match,但是返回值为匹配的第一个位置。

6、Math.round(-1.5)。返回随机字符串:

1 function random_str(length) {
2   var a = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘;
3   var str = ‘‘;
4   for (var i=0; i < length; ++i) {
5     var rand = Math.floor(Math.random() * a.length);
6     str += a.slice(rand, rand + 1);
7   }
8   return str;
9 }

7、Date:getYear():返回距离1900的年数。valueOf方法返回实例对象距离1970年1月1日00:00:00 UTC对应的毫秒数,该方法等同于getTime方法。

8、正则:regex.test(string)返回布尔值。regex.exec(string)返回数组,有lastIndex属性。string.match(regex)不匹配返回null。search返回第一个满足条件的匹配结果在整个字符串中的位置,否则-1。

9、JSON:JSON.stringify,JSON.parse方法用于将JSON字符串转化成对象

10、console

11、属性描述对象

四、面向对象编程

1、JavaScript的对象体系是基于构造函数(constructor)和原型链(prototype)的。使用构造函数(constructor)作为对象的模板(首字母大写)。

    new命令的作用,就是执行构造函数,返回一个实例对象。new命令总返回一个对象。

如果构造函数内部有return语句,而且return后面跟着一个对象,new命令会返回return语句指定的对象;否则,就会不管return语句,返回this对象。

2、this

在全局环境使用this,它指的就是顶层对象window。构造函数中的this,指的是实例对象。当A对象的方法被赋予B对象,该方法中的this就从指向A对象变成了指向B对象。

3、prototype

原型对象的作用,就是定义所有实例对象共享的属性和方法。

constructor属性的作用,是分辨原型对象到底属于哪个构造函数。

instanceof运算符用来比较一个对象是否为某个构造函数的实例。

Object.getPrototypeOf方法返回一个对象的原型。

Object.setPrototypeOf方法可以为现有对象设置原型,返回一个新对象。

对象实例的isPrototypeOf方法,用来判断一个对象是否是另一个对象的原型。

4、Object对象与继承

5、面向对象编程的模式

五、DOM(未看)

1、对于HTML文档,节点主要有以下六种类型:Document节点、DocumentType节点、Element节点、Attribute节点、Text节点和DocumentFragment节点。

六、浏览器环境

1、浏览器核心:渲染引擎和JavaScript引擎,

如果脚本之间没有依赖关系,就使用async属性,如果脚本之间有依赖关系,就使用defer属性。如果同时使用asyncdefer属性,后者不起作用,浏览器行为由async属性决定。

重流必然导致重绘,重绘不一定需要重流。

根据页面本身的协议来决定加载协议,这时可以采用下面的写法。<script src="//example.js"></script>

2、window.location === document.location。

    URL编码:encodeURI(),encodeURIComponent(),decodeURI(),decodeURIComponent()。

3、history.back()返回上一页(从浏览器缓存中加载)。

URLSearchParams API用于处理URL之中的查询字符串,即问号之后的部分。

URLSearchParams还可以与URL接口结合使用。var url = new URL(location);url.searchParams就是URLSearchParams {}对象。

4、每个Cookie的大小一般不能超过4KB。

Cookie保存以下几方面的信息:Cookie的名字,Cookie的值,到期时间,所属域名(默认是当前域名),生效的路径(默认是当前网址)。

window.navigator.cookieEnabled属性返回一个布尔值,表示浏览器是否打开Cookie功能。document.cookie属性返回当前网页的Cookie。

两个网址只要域名相同和端口相同,就可以共享Cookie。

5、sessionStorage和localStorage。

JSONP:网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。

WebSocket是一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀。

6、浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

JSONP只支持GET请求,CORS支持所有类型的HTTP请求。

7、Notification API是浏览器的通知接口,用于在用户的桌面(而不是网页上)显示通知信息。

8、Performance API用于精确度量、控制、增强浏览器的性能表现。

七、语法专题:

1、JavaScript引擎有多个线程,单个脚本只能在一个线程上运行,其他线程都是在后台配合。

为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。

所谓Event Loop机制,指的是一种内部循环,用来一轮又一轮地处理消息队列之中的消息,即执行对应的回调函数。(异步模式)

所有任务分为同步任务和异步任务。

2、如果被setTimeout推迟执行的回调函数是某个对象的方法,那么该方法中的this关键字将指向全局环境。

setIntervel具有累积效应。

3、Promise是JavaScript异步操作解决方案。

4、严格模式

以上笔记总结自—— http://javascript.ruanyifeng.com/

时间: 2024-08-11 08:22:22

JavaScript标准参考教材(alpha)--笔记的相关文章

JavaScript 标准参考教程(alpha)笔记

JavaScript 标准参考教程(alpha)笔记 http://javascript.ruanyifeng.com/#introduction 2.1.4 n--: 先使用n再执行n=n-1; --n: 在使用n之前先执行n=n-1; 2.1.5 区块( {   } )对于var命令不构成单独的作用域,与不使用区块的情况没有任何区别. 2.1.6.3 若switch结构中case代码块内部没有break语句,否则就会接下去执行下一个case代码. 需要注意的是,switch语句后面的表达式,

阮一峰javascript标准参考教程 (IndexedDB:浏览器端数据库)

1.概述 随着浏览器的处理能力不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少用户等待从服务器获取数据的时间. 现有的浏览器端数据储存方案,都不适合储存大量数据:cookie不超过4KB,且每次请求都会发送回服务器端:Window.name属性缺乏安 全性,且没有统一的标准:localStorage在2.5MB到10MB之间(各家浏览器不同).所以,需要一种新的解决方案,这就是 IndexedDB诞生的背景. 通俗地说,IndexedDB就是浏览器端数据库,可以被网页脚本程

阮一峰老师的JavaScript标准参考教程:Object对象和Object方法

Object对象 1. 概述 1.1 生成方法 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型. 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合. var obj = { foo: 'Hello', bar: 'World' }; 上面代码中,大括号就定义了一个对象,它被赋值给变量obj,所以变量obj就指向一个对象.该对象内部包含两个键值对(又称为两个“成员”),第一个键值对是foo: 'Hello',其中f

阮一峰老师的JavaScript标准参考教程:数组、Array对象和Array对象方法

数组 1. 定义 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始),整个数组用方括号表示. var arr = ['a', 'b', 'c']; 上面代码中的a.b.c就构成一个数组,两端的方括号是数组的标志.a是0号位置,b是1号位置,c是2号位置. 除了在定义时赋值,数组也可以先定义后赋值. var arr = []; arr[0] = 'a'; arr[1] = 'b'; arr[2] = 'c'; 任何类型的数据,都可以放入数组. var arr = [ {a:

Javascript标准参考教程学习记录

教程:http://javascript.ruanyifeng.com/ 基本语法 - 函数 1.函数名的提升 JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数会被提升到代码头部.下面的代码不会报错. f();function f(){} 但是,采用赋值语句定义函数,JavaScript就会报错.f();var f = function (){}; // TypeError: undefined is not a function 如果同时采用functi

《Javascript权威指南》学习笔记之十九--HTML5 DOM新标准---处理文档元信息和管理交互能力

一.了解DOM 1.DOM是Document Object Model的缩写,即文档对象类型,是文档在内存中的表示形式,是一个应用程序接口,定义了文档的逻辑结构以及一套访问和处理文档的方法. 2.HTML DOM与Core DOM的区别:前者提供了大量的方法和属性,与现有的程序模型一致,更便于脚本的编写者控制. 二.document对象 使用window.document属性返回一个document对象,代表当前window内加载的文档.window可以省略.winName.document返回

《javascript权威指南》读书笔记——第一篇

<javascript权威指南>读书笔记--第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本书来补充下. 今天是今年的196天,由于我之前承诺过,每天分享读书笔记,只是之前分享的是大众读物,所以随手分享到kindle阅读群里了.但是现在读的是技术类书籍,分享到kindle读书群不太合适,所以还是以博客的形式分享.这样子,一个链接,大家感兴趣了就点开看看,不感兴趣了,就不点开. 其实这篇文章应该是昨天

《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方案

一.AJAX概述 AJAX是Asynchronous JavaScript and XML的缩写,中文译作异步JavaScript和XML.AJAX 不是新的编程语言,而是一种使用现有标准的新方法,在不重新加载页面的情况下,与服务器交换数据并更新部分网页的艺术.其核心是:客户端的Javascript能够与web服务器进行异步数据交换. 二.AJAX基础---XMLHttpRequest对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHt

《Javascript权威指南》学习笔记之十六:BOM之源---BOM基本应用

BOM的基本应用包括:管理浏览器历史.解析地址和获取浏览器信息,本文将介绍这些应用. 一.浏览历史管理 1.history对象的方法和属性 History 对象包含用户(在浏览器窗口中)访问过的 URL,是 window 对象的一部分,可通过 window.history 属性对其进行访问.没有应用于 History 对象的公开标准,不过所有浏览器都支持该对象. length属性:返回浏览器历史列表中的URl数量.是"前进"和"后退"两个按钮之下包含的地址数的总和.