第二章
x
++
y
解析为 x;++y;而不是x++;y;
第三章
-
只有 null 和 undefined 是无法拥有方法的值。
-
js能表示的数字范围是(-2^53~2^53), 因为采用IEEE754标准。对于这个标准的来龙去脉。不作深究。
-
var s = "hello world"; s.charAt(0);//"h" ,可用charAt(x)获取对应位置上的字符,中文也适用。
也可用用s[s.length-1];//d
-
原始值(undefined,null,布尔值,数字,字符串):任何方法都无法改变原始值;
var s = "hello world";
s[0] = "1"// s不变;
s.toUpperCase(); //s不变,只是返回新的字符串。
-
Boolean(-1)//true,只要是非0,就等于true
Boolean([])//true
Boolean({})//true
-
!xx //等价于 Boolean(x)
-
对象到字符串的转换:
调用toString()->valueOf()->toString()->errror
对象到数字的转换:
调用valueOf()->toString()->number()->error
-
任何对象在左==或者"<",">"等作比较的时候,都会首先尝试调用valueOf(),判断是否能作比较,如果不能比较然后再调用toString();
var obj = {};
obj.toString = function(){return 0};
false == obj //true
-
JS 中var变量的块级作用域只存在于函数中,与{}无关。
function test(){
var i = 1;
if(false){
var j = 2;
}
console.log(j);//j==underfine 有定义,没赋值。
10.当使用var 声名一个变量,创建的这个属性是不可配置的,也就是说这个变量无法被delete;
11.在一层层作用域链中查找变量的过程叫做“变量解析”
第四章
1. var x = [1,2,,,] //x = [1,2,undefined] ,无论后面有多少个逗号,都只有一个undefined
2. 如果一个对象的创建不需要传入任何参数给构造函数的话,那么这对空圆括号是可以省略的; // new Object , new Data
3. 数字除以0,等于正负无穷大,0除以0等于NaN // 1/0 = Infinity, 0/0 = NaN
4. 加号优先考虑字符串链接 // "1" + 1 = 11
如果其中一个是对象则调用toString()之后相加, // 1+ {} = 1[Object Object]
其余情况会将两边转换为数组相加 //true+true = 2, null + true = 1
5. "++"运算符从不进行字符串连接操作 // var a = "a"; a++ => NaN
6. 如果是非对象的 == 比较,如 true == 1 , null == undefined //会将非数字的转化为数字再比较
如果其中一个是对象,则会调用toString(); //var s = {}; s == "[object Object]"
7. 加号运算符更偏爱字符串,比较运算符则更偏爱数字 // "1" + 2 = 12, "11" < 3 = false
8. 如果instanceof 右操作数不是函数,则报异常
继续阅读