var聲明的變量不可以被刪除
位運算符會將NaN虱肄、Infinity秀撇、-Infinity都轉換為0
var result = 2 & 1 // 判斷奇偶 為0是偶數(shù) (奇數(shù)的二進制碼的最后一位數(shù)肯定是1)
var num = 1.1 | 0; // 1(浮點數(shù)是不支持位運算的蜂厅,所以會先把1.1轉成整數(shù)1再進行位運算喊巍,就好像是對浮點數(shù)向下求整)
//(最高位為1代表負數(shù),負數(shù)的二進制轉化為十進制:符號位不變黄琼,其他位取反加1)
var num = 1; // 二進制 00000000000000000000000000000001
var num1 = ~num; // 二進制 11111111111111111111111111111110
正數(shù)的無符號右移與有符號右移結果是一樣的。負數(shù)的無符號右移會把符號位也一起移動整慎,而且無符號右移會把負數(shù)的二進制碼當成 正數(shù) 的二進制碼
我們可以利用無符號右移來判斷一個數(shù)的正負
function isPos(n) {
return (n === (n >>> 0)) ? true : false;
}
isPos(-1); // false
isPos(1); // true
==
如果一個是字符串一個是數(shù)字 則把字符串轉換成數(shù)字然后進行比較
< 比較規(guī)則
'11' < 3; //false 數(shù)字的比較 11 < 3
'one' < 3; //false 數(shù)字的比較 NaN < 3
數(shù)組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
數(shù)組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"
在嚴格模式中,調用的函數(shù)中的一個this值是undefined裤园。(在非嚴格模式中撤师,調用的函數(shù)中的this值總是全局對象)∨±浚可以利用這種特性來判斷javascript實現(xiàn)是否支持嚴格模式:
var hasStrictMode = (function(){"use strict"; return this === undefined}());
通過原型繼承創(chuàng)建一個新對象
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']