1.window.JSON
JSON.parse(text [, reviver]); => text:必须一个有效的JSON字符串; reviver:可选,处理函数;返回null或者undefined时删除text的成员;一般用于将字符串转换为json对象;
JSON.stringify(); => 将json对象转换为字符串;
2.表达式 && 操作符;
算数表达式:
+ =>加,字符串和数字相加返回字符串,前导 + 转换为数字; + '1a' => 1; 'a' + 1 => 'a1';
- =>减,会自动做数字转换;
* => 乘
/ => 除
% => 取余; => 5%2 = 1;
++/-- => 递增/递减 前置会保留最后一次计算结果 => a++ 会返回 a;结果为a+1; ++a 会返回a+1 结果也为a+1;
位操作符:
~ => 取操作数负值, 然后再减一 ~8 === -9;
& => 只要任何一位是0 &运算的结果就是 0
例:1 & 2 === 0; 01 & 10 => 00 => 0;
8 & 1 === 0; 1000 & 01 => 0000 => 0;
9 & 1 === 1; 1001 & 01 => 0001 => 1;
| => | 跟 & 的区别在于 如果对应的位中任一个操作数为1 那么结果就是1;
例:1 | 2 === 3; 01 | 10 => 11 => 3;
9 | 2 === 11 ; 1001 | 10 =>1011 => 11;
^ => ^运算符跟 | 类似,但有一点不同的是 如果两个操作位都为1的话,结果产生0;
例:1 ^ 2 === 3; 01 ^ 10 => 11 => 3;
9 ^ 1 === 8; 1001 ^ 01 => 1000 => 8;
<< => 向左移动,超过的位将丢失,而空出的位则补0 1 << 2 == 4; 1 => 100 => 4
>> => 向右移动,超过的位将丢失,而空出的位则补0 10 >> 2 == 2;1010 => 10 => 2;任何小数 >> 0 可以取整;
>>>(无符号右移)
有的时候有问题: 例如:1.7976931348623157e+308 >> 5; => 1.7976931348623157e+308 << 5;不要使用科学计数法;
ps:使用parseInt()处理数字时,将数字转换为字符串之后在处理;
逻辑运算符:
&&
第一个操作数为 false/0/''/NaN/null/undefined 时, 返回 false/0/''/NaN/null/undefined
其它, 返回第二个操作数(不一定是 Boolean)
发生短路操作, 即第一个操作符为 false 时, 不再计算第二个操作数(表达式)
||
第一个操作数为 false/0/''/NaN/null/undefined 时, 返回 第二个操作数;
第一个操作数为真时,直接返回;
繁盛短路操作,第一个操作符为true时,不再计算第二个操作数;
! => 取反
空字符串/数值 0/null/NaN/undefined, 返回 true
其他, 返回 false
应用 !!, 相当于把操作数转换为 Boolean
关系表达式:
== ===; => ==不对比类型; === 对比类型;
!= !==; =>
同上返回值为 Boolean 类型(true/false)
null 和 undefined 相等
NaN 和任意值比较都不相等
如果有一个操作数为 Boolean, 则把 true/false 转化为 1/0
字符串和数字比较, 则把字符串转化为数字
如果一个操作数是对象, 另一个不是对象, 则调用对象的 .valueOf() 方法, 得到的值按上面规则再比较
>=,> <=,< => 数学里面的没什么说的
in => 是否在对象里面 例: var key in obj;
instanceof => 判断对象是不是另一个对象的实例;