var声明的变量不可以被删除
位运算符会将NaN、Infinity、-Infinity都转换为0
var result = 2 & 1 // 判断奇偶 为0是偶数 (奇数的二进制码的最后一位数肯定是1)
var num = 1.1 | 0; // 1(浮点数是不支持位运算的,所以会先把1.1转成整数1再进行位运算,就好像是对浮点数向下求整)
//(最高位为1代表负数,负数的二进制转化为十进制:符号位不变,其他位取反加1)
var num = 1; // 二进制 00000000000000000000000000000001
var num1 = ~num; // 二进制 11111111111111111111111111111110
正数的无符号右移与有符号右移结果是一样的。负数的无符号右移会把符号位也一起移动,而且无符号右移会把负数的二进制码当成 正数 的二进制码
我们可以利用无符号右移来判断一个数的正负
function isPos(n) {
return (n === (n >>> 0)) ? true : false;
}
isPos(-1); // false
isPos(1); // true
==
如果一个是字符串一个是数字 则把字符串转换成数字然后进行比较
< 比较规则
'11' < 3; //false 数字的比较 11 < 3
'one' < 3; //false 数字的比较 NaN < 3
数组in,是判断是否有相应的索引而不是值
var data = [7, 8, 9];
0 in data; //true
3 in data; //false
eval
var geval = eval;
var x = "global", y = "global";
function f(){
var x = "local";
eval("x += 'changed';");
return x;
}
function g(){
var y = "local";
geval("y += 'chnaged';");
return y;
}
console.log(f(), x); //localchanged global
console.log(g(), y); //local globalchnaged
数组delete
var arr = [1, 2, 3];
delete arr[0];
a.length; //3
空语句
for(i = 0; i < a.length; a[i++] = 0);
with
var o = {};
with(o){
x = 1;
}
//o没有x属性所以这里x=1是定义了一个全局的x
//如果o有x属性则修改o对象x属性的值
"use strict"
在严格模式中,调用的函数中的一个this值是undefined。(在非严格模式中,调用的函数中的this值总是全局对象)。可以利用这种特性来判断javascript实现是否支持严格模式:
var hasStrictMode = (function(){"use strict"; return this === undefined}());
通过原型继承创建一个新对象
function inherit(p){
if(p == null) throw TypeError();
if(Object.create)
return Object.create(p);
var t = typeof p;
if(t !== 'object' && t !== 'function') throw TypeError();
function f(){};
f.prototype = p;
return new f();
}
判断属性是否可以被枚举
var o = {a: 1};
o.propertyIsEnumerable("toString"); //false
o.propertyIsEnumerable("a"); //true
Object.getOwnPropertyNames会返回对象所有的自有属性,包括不能被枚举的
var o = {x: 1, y: 2};
Object.defineProperty(o, 'z', {
enumerable: false
})
Object.getOwnPropertyNames(o); //['x', 'y', 'z']
Object.keys(o); //['x', 'y']