目錄javascript
@(es5)java
typeof
(可以判斷的值:undefined
、string
、number
、function
;其餘的類型,如對象、數組、null
和 undefined
均判斷爲object
)instanceof
(不推薦)getPrototypeName
()Object.getPrototypeName.call(null,variable) === '[object array]' Object.getPrototypeName.call(null,variable) === '[object object]' isNaN(NaN) Array.isArray(ary)
ps: var
只對第一個變量前的的等號起做用,後面有變量則是全局做用下,(不推薦這種寫法)。數組
function foo() { var x = y = 0; } y;// 0
ps:閉包能夠改變函數的做用鏈(延長做用鏈)閉包
function foo() { var x = 0; return function () { return ++x; } } var b = foo(); b();//1 b();//2
this
)在es5中,this的指向是調用時使用的對象函數
function fn () { console.log(this) } fn() // window const person = { say: function () { console.log(this) } } person.say() // person setTimeout(function () { console.log(this === window) // true })
ps: setTimeout
和 setInterval
第一個參數function的this指向是window
性能
function
預解析高於var
。console.log(a); //function () { ... } var a = 0; function a() { //TODO }
function fn(){}
這種形式是預解析,不是變量賦值。即,若是var
聲明的變量和function fn(){}
的函數同名,在執行過程當中執行var
中的變量,而function
對應函數不存在。console.log(a); //function () { ... } var a = 2; function a() { console.log('fn a()'); } console.log(a); // 2 // var a = 3; a(); // error: a is not a function
或this
console.log(a); //function () { ... } var a = 2; console.log(a); // 2 // var a = 3; a(); // error: a is not a function function a() { console.log('fn a()'); }
歷史問題:標記清楚、引用計數、性能問題、管理內存es5
var global_variable = null;