function _instanceof(A, B) { var O = B.prototype;// 取B的顯示原型 A = A.__proto__;// 取A的隱式原型 while (true) { //Object.prototype.__proto__ === null if (A === null) return false; if (O === A)// 這裏重點:當 O 嚴格等於 A 時,返回 true return true; A = A.__proto__; } }
function deepClone(data) { if(typeof data === "object" && data !== null){ var type = data.constructor; var result = new type(); for (var key in data) { if (data.hasOwnProperty(key)) { result[key] = deepClone(data[key]); } } return result; } return data; }
var arr = [1, 2, [3]]; var res = Array.prototype.concat.apply([], arr); console.log(res); var arr2 = [1]; console.log(111); console.log(arr2.concat(11)); // es6 let flatten = arr => arr.reduce((begin,current)=>{ Array.isArray(current)? begin.push(...flatten(current)): begin.push(current); return begin },[])
let aa = 10937843.44; console.log(typeof aa.toFixed(3));
let test = function aa(){} // 這是一個表達式,表達式忽略名字的 let test1 = function(){} console.log(test) console.log(test.name) // aa console.log(test1.name) //test1 console.log(aa)
function tmp(a,b){ console.log(tmp.length) // 2 表示函數形參的個數 } tmp(1) function sum(a,b,c){ a = 11; console.log(arguments[0]) // 形參和實參映射關係(兩個都存在才映射) c = 2; console.log(arguments[2]) // undefined } sum(1,2)
函數聲明總體提高,變量只是聲明提高
預編譯的過程(主要是讀變量聲明)es6
// 1. 建立AO對象(Active Object) // 2. 查找函數形參及函數內變量聲明,形參名及變量名做爲AO對象的屬性,值爲undefined // 3. 實參形參相統一,實參值賦給形參 // 4. 查找函數聲明,函數名做爲AO對象的屬性,值爲函數引用 全局的就是GO 就是window function test(){ console.log(b) if(a){ var b = 10; // 不要管if ,預編譯看到聲明就處理 } }