第一章-變量
1.內(nèi)置類型
空值(null)
未定義(undefined)
布爾值(boolean)
數(shù)字(number)
字符串(string)
對象(object)
符號(symbol,ES6新增)
2.null==='object'
typeof null === 'object' //true
正確的返回結(jié)果應(yīng)該是"null",但這個bug由來已久,
在javascript中已經(jīng)存在了將近20年,也許永遠(yuǎn)也不會修復(fù)
因為這涉及太多現(xiàn)有的web系統(tǒng),修復(fù)它會產(chǎn)生更多的bug
3.null是基本類型中唯一的假值
var a = null;
(!a && typeof a === "object"); //true
4.function(函數(shù))是javascript的一個內(nèi)置函數(shù)
實際上function是object的一個“子類型”,
函數(shù)是"可調(diào)用對象",它有一個內(nèi)部屬性[[Call]],
該屬性使其可以被調(diào)用
5.數(shù)組是對象,是object的一個子類型
typeof [1,2,3] === "object"; //true
6.javascript中的變量沒有類型,只有值才有類型
變量可以隨時持有任何類型的值
7.undefined與undeclared
變量在作用域中聲明但是沒有復(fù)制為"undefined",
變量在作用域中未聲明"undeclared"
第二章-值
1.數(shù)組可以容納任意類型的值
2.delete操作后不會影響數(shù)組的長度
使用delete運算符可以將單元從數(shù)組中刪除,
但是單元刪除后數(shù)組的length屬性并不會發(fā)生變化
3.稀疏數(shù)組的length受最大值影響
var a = [];
a[0] = 1;
a[2] = 3;
a[1]; //undefined
a.length; //3
4.數(shù)組中數(shù)字和字符作為索引時,數(shù)組長度只統(tǒng)計數(shù)字部分
var a = [];
a[0] = 1;
a["bugall"] = 2;
a.length; //1
a["bugall"] = 2;
a.bugall = 2;
5.如果字符串鍵值能夠被強(qiáng)制類型轉(zhuǎn)換為十進(jìn)制數(shù)字的話,
它會被當(dāng)做數(shù)組索引處理
var a = [];
a["13"] = 42;
a.length; //14
6.javascript只有一種數(shù)值類型:number
javascript中的數(shù)字類型是基于IEEE 754標(biāo)準(zhǔn)實現(xiàn)的,
該標(biāo)準(zhǔn)通常也被稱為“浮點數(shù)”,javascript使用的是
"雙精度"格式64位二進(jìn)制
7.42.toFixed(2) //SyntaxError
42..toFixed(2) = 42.00,42.toFixed(2)
是無效語法,因為.被視為常量42.的一部分
8.0.1+0.2 === 0.3 //false
二進(jìn)制浮點數(shù)中0.1和0.2并不是十分精確,它們相加的結(jié)果并非剛好等于0.3,而是一個
非常接近的數(shù)字0.3000000000000000002
9. 如何判斷兩個小數(shù)是否相等
function numbersCloseEnoughToEqual(n1,n2){
return Math.abs(n1-n2)
}
numbersCloseEnoughToEqual(0.3,0.3) //true
10. 整數(shù)的安全范圍
數(shù)字的呈現(xiàn)方式?jīng)Q定了“整數(shù)”的安全值范圍遠(yuǎn)遠(yuǎn)小于
Number.