——–第一遍刷javascript权威指南,上次的看书笔记看的是书上的前
四章(书上第一章是概述),这两个礼拜又看了几章,既是复习又是总结,
码一下最近的看书笔记。但像闭包等一些知识点感觉自己理解的不够,
之后有自己的理解的再总结吧。
第五章 语句
如果有特殊目的,需要使用空语句,最好在代码中添加注释,可清楚说明这条语句是有用的。
-
函数定义的两种写法
var f=function(x)
{
return x+1;
}//表达式赋值给一个变量
function f(x)
{
return x+1;
}//含有变量名的语句- 两者区别:
使用var的话只有变量声明提前,变量初始化代码仍在原位置,使用函数声明语句,函数名称和函数体均提前。
- 两者区别:
switch语句的case操作实际上是“===”,因此不会做任何类型转换
switch语句中可用return代替break
“default:”标签可以放在switch内任何地方
死循环:while(true);for(;;);
for/in循环可以枚举对象属性和数组索引
for/in循环只能遍历到“可枚举”的属性
return语句可以单独使用而不必带expression,函数返回undefined
严格模式与非严格模式的重要区别
1.严格模式中禁止使用with语句
2.严格模式下,所有变量都要先声明
3.严格模式下调用函数中(不是方法)的this值是undefined,非严格模式中函数中的this值是全局对象
第六章 对象
创建对象方法,es5定义了一个名为Object.create()的方法,他创建一个新对
象,其中第一个参数是这个对象的原型。通过(.)和([ ])运算符来获取属性的值,对于(.)来说,右侧必须是一个以属性名称命名的简单标识符。对于([ ])来说,方括号内必须是一个计算结果为字符串的表达式(使用“ ”)
在javascript中,只有在查询属性时才会体会到继承的存在,而设置属性则和集成无关
查询一个不存在的属性并不会报错,返回undefined;查询不存在的对象的属性时会报错(null和undefined值都没有属性)
delete运算符只能删除自有属性,不能删除继承属性
delete不能删除可配置性为false的属性,(比如通过var声明的全局对象的属性),非严格模式会返回false
检测属性可使用in运算符,或使用“!==”判断一个属性是否为undefined;但in可以区分不存在的属性和存在但值为undefined的属性
第七章 数组
数组直接量的语法(“[]”)允许有可选的结尾的逗号,故[,,]只有两个元素(undefined)而非三个
可使用构造函数array创建数组,
var a=new Array();
var a=new Array(10);//一个数值参数指定长度
var a=new Array(5,4,3,2,1,"testing,testing");//显式指定两个或多个数组元素获知数组的一个非数值元素
数组是对象的特殊形式,javascript将制定的数字索引值转换成字符串——1变成”1”——将其当作属性名来使用
数组的特别之处就在于当使用小于2^32的非负整数作为属性名时数组会自动维护其length属性值
所有的索引都是属性名,但只有在0~2^32-2之间的整数属性名才是索引,如果使用的属性是数组的索引,数组就会根据需要更新length
数组索引仅仅是对象属性名的一种特殊类型,这意味着javascript数组没有”越界”错误的概念
添加数组元素时可以使用push()方法在数组末尾增加一个或多个元素,和给a[a.length]赋值是一样的
使用delete不会修改数组的length属性,会变成稀疏数组
javascript不支持真正的多维数组,但可以用数组的数组来近似
Array.join()方法将所有元素转化为字符串并连接在一起,返回最后生成的字符串,是String.split ()方法的逆向操作(将字符串分割成若干块来创建一个数组)
字符串的行为类似于只读数组,可以用charAt()方法和[]来访问单个字符
第八章 函数
函数声明语句被提前到外部脚本或外部函数作用域的顶部,所以可以在它定义之前出现的代码所调用;表达式定义的函数赋值给一个变量,变量的声明提前但赋值没有,所以在定义之前无法调用
函数声明语句并非真正的语句,它可以出现在全局代码里,或内嵌在其他函数中,但它不能出现在循环,条件判断,或者try/cache/finally以及with语句中,但函数的定义表达式可以出现在javascript代码的任何地方
关键字this没有作用域限制,嵌套函数不会从调用它的函数中继承this。嵌套函数作为方法调用时,this值指向调用它的对象。嵌套函数作为函数调用时,非严格模式下this是全局对象,严格模式下是undefined
javascript的”函数重载”,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象,可以通过数字下标访问传入函数的实参值,而并不一定通过名字得到实参
javascript中无法声明只在一个代码块内可见的变量,因此,常定义一个函数用做临时的命名空间。(直接定义一个匿名函数并在单个表达式中调用它)
(function(){
//code
}());