1.下面在控制檯的輸出是什麼??數組
console.log( [typeof null , null instanceof Object] ) /* 咱們知道JS中變量類型分爲值類型和引用類型。typeof 能夠識別出 undefined、string、number、boolean 四種值類型,{}、[]、null 都是返回 'object',函數則返回'function'。另外,symbol類型也能夠識別返回'symbol'。 A instanceof B方法則是判斷A的原型鏈上是否有B的原型。 好比 [] instanceof Array 返回 true, 明顯此處null instanceof Object返回false。 結果爲 ["object", false] */
2.下面在控制檯的輸出是什麼??閉包
[]["map"]+[1,2] // 空數組的"map"屬性是函數,'+'鏈接引用類型是字符串拼接。 // 因此 'function map(){...}1,2' []["a"]+[1,[2,3]] // 空數組的"a"屬性是undefined,與數組拼接,結果爲'undefined1,2,3' []['push'](1) // []['push'](1) => [].push(1),返回數組長度'1' (![]+[])[+[]] // ![] => false,+[] => 0,false + [] => 'false', // 空數組轉爲數字是0,'false'[0] 爲 'f' (![]+[])[+!![]] // ![]爲false,!![]則爲true,Number(true) => 1;('false')[1] => 'a' ++[[]][+[]] + [+[]] // ++[[]][0] + [0], 1 + [0] => '10' [1 < 2 < 3, 3 < 2 < 1] // 1 < 2 < 3 => false < 3 => 0 < 3 => true, 一樣[true, true]
3.閱讀如下代碼,下面的輸出是什麼??app
var a = 1, b = c = 0; function add(n){ return n=n+3; } y = add(a); function add(n){ return n=n*5; } z = add(a); console.log(y,z); // 變量提高, y = 5; z = 5 結果爲5 5
4.閱讀如下代碼,下面的輸出是什麼??函數
function showCase(value) { switch(value) { case 'A': console.log('Case A'); break; case 'B': console.log('Case B'); break; case undefined: console.log('undefined'); break; case new String('A'): console.log( new String('A') ); break; default: console.log('Do not know!'); } } showCase(new String('A')); // new String('A')是一個字符串對象,沒有選項與之全等,輸出'Do not know!'。
5.如下代碼在控制檯的輸出是什麼??this
parseInt(3, 8) parseInt(3, 2) parseInt(3, 0) // 把八進制的3轉換爲十進制的3;二進制中沒有3爲NaN; // 進制數的區間[2, 36],不在範圍內爲NaN,0默認是十進制,爲3。
6.如下代碼在控制檯的輸出是什麼??prototype
["1", "2", "3"].map(parseInt) // parseInt('1', 0) 1 // parseInt('2', 1) NaN // parseInt('3', 2) NaN // ["1", "2", "3"].map(e => parseInt(e)) 若是指定參數則結果爲[1,2,3]
7.如下代碼在控制檯的輸出是什麼??code
function fn(ary) { ary[0] = ary[2]; } function bar(a,b,c) { c = 10 // 實參列表爲[1, 1, 10] fn(arguments); // [10, 1, 10] return a + b + c; } bar(1,1,1) // 21
8.如下代碼在控制檯的輸出是什麼??對象
function fn(){} console.log( Array.isArray(Array.prototype) ,Object.getPrototypeOf(fn) ) // 函數的原型是函數,數組的原型是數組,對象的原型是對象; // Array.isArray(Array.prototype) => true // Object.getPrototypeOf(fn) => fn.__proto__ = Function.prototype即一個函數
9.下面的輸出是什麼??原型鏈
(function(){ var x = y = 1; })(); console.log(y); // 1 console.log(x); // 未定義報錯 // 預編譯函數做用域中定義x,執行時y在父級做用域(全局)爲1,x爲1。執行結束x銷燬。
10.下面的輸出是什麼??作用域
if(typeof c&&-true+ (+undefined)+''){ // 'undefined' && 'NaN' console.log('l am ok'); } if(22+'33'*2==88){ // 88 == 88 true console.log('我還能作十道'); } !!' '+!!'' -!!false||console.log('我選擇go die'); // true+false-false => 1
11.下面的輸出是什麼??
var length = 10; function fn(){ console.log(this.length); } var obj = { length:5, method:function(){ console.log(this.length); //obj.length 5 fn(); //window.length 10 arguments[0](); //arguments長度爲2 } } obj.method(fn,1)
12.下面的代碼輸出是什麼??
var a = { n:1 }; var b = a; // a.n 仍是指對象{n: 1} a是{m: 1}(運算符優先級) a.n = a = { m:1 }; console.log(a,b) //a => {m: 1} b => {n: {m: 1}}
13.下面的代碼輸出是什麼??
var x = 1 if(function fn(){}){ x += typeof fn } //(function fn(){}) //!function fn(){} //+function fn(){} //-function fn(){} //~function fn(){} // 函數表達式沒有名字,fn未定義 console.log(x); // '1undefined'
14.下面的代碼輸出是什麼??
var x = 10; function a(){ y = function(){ x = 2; } console.log(this); // window調用,this指向window return function(){ var x = 3; y(); // y函數與父級函數內都沒有x,將window的x賦爲2 console.log(this.x); // 2 }.apply(this) } a(); console.log(y); // y是window中的函數
15.下面的代碼輸出是什麼??
typeof undefined=== typeof Undefined //兩邊都是"undefined" true
16.下面的代碼輸出是什麼??
var a={}, b={key:'b'}, c={key:'c'}; a[b]=123; // a[object Object] = 123 a[c]=456; // a[object Object] = 456 // 對象和數組的鍵名都是字符串,b和c對象轉爲字符串都是"[object Object]" console.log(a[b])
17.下面的代碼輸出是什麼??
var out = 25, inner = { out: 20, func: function () { var out = 30; return this.out; } }; console.log((inner.func, inner.func)()); // (inner.func, inner.func)獲得後面的結果,自執行函數指向window, 25 console.log(inner.func()); // inner調用函數,this指向inner對象爲 20 console.log((inner.func = inner.func)()); // 25 賦值後獲得函數,而後運行; 同一,至關於var fn = inner.func; fn()
18.下面的代碼輸出是什麼??
if (!("a" in window)) { // window中是否有a屬性 var a = 1; // 變量提高, window中a爲undefined;若是爲let,則a不存在報錯 } alert(a); // 'undefined'
19.下面代碼的輸出是什麼??
var fn = function test(){ console.log('代碼執行了') } test() // 語法錯誤、引用錯誤、類型錯誤,此處是引用錯誤,test未定義。
20.下面的代碼輸出是什麼??
var str = typeof typeof {name:'heaven'}; // 兩個typeof 必定是'string',str = 'string' if( str.length==6 ){ str.prop = '這是一波字符串'; //包裝類執行完以後,當即銷燬,因此再打印是沒有結果的,'undefined'。 } console.log(str.prop)
21.下面的代碼輸出是什麼??
function fun(n,o) { console.log(o); return { fn:function(m){ return fun(m,n); } }; } var a = fun(0); // a = { fn: function(){...} } // 打印 undefined a.fn(1); // 執行a.fn(1),n爲傳進來的實參1,o爲產生閉包時的賦值0。(fun(0)執行時的AO對象,o爲0) // 打印 0 a.fn(2); // 一樣執行a.fn(2),m爲傳進來的實參2,o爲產生閉包時的賦值0。 // 打印 0 a.fn(3); // 一樣執行a.fn(3),m爲傳進來的實參3,o爲產生閉包時的賦值0。 // 打印 0 var b = fun(0).fn(1).fn(2).fn(3); // fun(0)執行,並返回對象{ fn: function(){...} }。打印 undefined // fn(1)執行,n爲傳進來的實參m:1,o爲產生閉包時的賦值0。打印 0 // fn(2)執行,n爲傳進來的實參m:2,其做用域鏈有fn(1)執行時,o的賦值1。打印 1 // fn(3)執行,n爲傳進來的實參m:3,其做用域鏈有fn(2)執行時,o的賦值2。打印 2 var c = fun(0).fn(1); // fun(0)執行,並返回對象{ fn: function(){...} }。打印 undefined // fn(1)執行,n爲傳進來的實參m:1,o爲產生閉包時的賦值0。打印 0 c.fn(2); // fn(2)執行,n爲傳進來的實參m:2,其做用域鏈有fn(1)執行時,o的賦值1。打印 1 c.fn(3); // fn(3)執行,n爲傳進來的實參m:3,其做用域鏈有fn(1)執行時,o的賦值1。打印 1
22.下面的代碼輸出是什麼??
var a = 1; var b = 2[a,b] = [b,a] // b = 2[1, undefined] = [undefined, 1] // b = undefined = [undefined, 1] console.log(a,b) // 1 [undefined, 1]
23.下面的代碼輸出是什麼??
var n = 10; var obj = { n : 5, c : a() //c是一個函數,此時obj調用時this指向obj。 }; function a(){ var n = 7; var c = function(){ var n = 3; console.log(this.n) } return c; }; obj.c() // 5 /*********************/ function fn(a,b,c,d){} fn.fn = function(){ console.log(this.length) } fn.fn() //一個函數的length屬性是形參個數。
24.下面的代碼輸出是什麼??
var arr = [1,3,5,7,9]; function fn(){ this.arr = [2,4,6,8,10]; arr.forEach( function(){ console.log(this.arr); } ); } new fn() // 回調函數中的this通常都指向全局,遍歷全局中的arr,並打印全局中的arr // [1, 3, 5, 7, 9] // [1, 3, 5, 7, 9] // [1, 3, 5, 7, 9] // [1, 3, 5, 7, 9] // [1, 3, 5, 7, 9]
25.下面的代碼輸出是什麼??
function test (){ var n = 4399; function add(){ n ++; console.log(n) }; return { n, add } } var result1 = test(); // { n: 4399, add: function(){...} } var result2 = test(); // { n: 4399, add: function(){...} } result1.add(); // 函數執行,打印出 4400 result1.add(); // 函數執行,打印出 4401 console.log(result1.n); // 4399 result2.add(); // 4400 // 分別產生兩個閉包,對閉包中的n進行n ++ 操做