2019年鐵人賽
、 JS
、 YouDon'tKnowJS
Array
-Likes)會出現array
-like的情況
- Various DOM query operations return lists of DOM elements that are not true array.
各種DOM查詢操作返回的lists不是真的array,而是array-likes。
- when functions expose the arguments (array-like) object (as of ES6, deprecated) to access the arguments as a list.
例如接API時要回傳我們function()使用了什麼參數,會傳去一個類陣列包住使用參數(書本叫引數,arguments)
var
一個新陣列時,會繼承陣列的prototype(原型),所以有一些method(方法)可用,如indexOf()
。
圖片來源MDN,有prototype的都可繼承使用
類陣列不像陣列可以繼承陣列所有方法使用,通常會用.slice()
變成array
var toArray = Array.prototype.slice.call(arrayLikes)
[補充] querySelectorAll vs. getElementById
.split()
切割字串成arrayvar a = "hello"
var b = a.split("") //["h","e","l","l","o"]
var c = ["h","e","l","l","o"]
//1. 找單一字母
a[1] //e, 這語法不建議用,舊版IE不支援
a.chartAt(1) //e, 正確做法
//2. 若string是char存在array裡,那a[1]應該要改變原值,結果不行
a[1] = "f"
b[1] = "f"
a //"hello"
b //["h","f","l","l","o"]
Number.isInteger()
測試值是否為整數Number.MAX_VALUE
> Number.MAX_SAFE_INTEGER
> Math.pow(2,31)-1
1.798e+308
> 2^52 - 1
> 2^31 - 1
Number.isNaN()
var a = 3 * "hi" //NaN
Number.isNaN(a) //true
NaN !== NaN //true
null
和undefined
常被當做"empty" values 或 "non" values使用null
表示曾經有值,但不再有null
不是識別字(identifier),不能賦值undefined
是一個識別字,非strict模式下可以賦值,但不建議用//爛透了的做法
function foo(){
undefined = 2
}