javascript學(xué)習(xí)筆記

var聲明的變量不可以被刪除
位運算符會將NaN、Infinity、-Infinity都轉(zhuǎn)換為0

var result = 2 & 1 // 判斷奇偶 為0是偶數(shù) (奇數(shù)的二進制碼的最后一位數(shù)肯定是1)
var num = 1.1 | 0; // 1(浮點數(shù)是不支持位運算的,所以會先把1.1轉(zhuǎn)成整數(shù)1再進行位運算,就好像是對浮點數(shù)向下求整)
//(最高位為1代表負數(shù),負數(shù)的二進制轉(zhuǎn)化為十進制:符號位不變,其他位取反加1)
var num = 1; // 二進制 00000000000000000000000000000001
var num1 = ~num; // 二進制 11111111111111111111111111111110

正數(shù)的無符號右移與有符號右移結(jié)果是一樣的。負數(shù)的無符號右移會把符號位也一起移動,而且無符號右移會把負數(shù)的二進制碼當(dāng)成 正數(shù) 的二進制碼
我們可以利用無符號右移來判斷一個數(shù)的正負

function isPos(n) {
  return (n === (n >>> 0)) ? true : false;    
}
isPos(-1); // false
isPos(1); // true
==

如果一個是字符串一個是數(shù)字 則把字符串轉(zhuǎn)換成數(shù)字然后進行比較

< 比較規(guī)則
'11' < 3; //false 數(shù)字的比較 11 < 3
'one' < 3; //false 數(shù)字的比較 NaN < 3
數(shù)組in,是判斷是否有相應(yīng)的索引而不是值
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"

在嚴格模式中,調(diào)用的函數(shù)中的一個this值是undefined。(在非嚴格模式中,調(diào)用的函數(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']
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容