JavaScript—易犯錯的題目

var arr = [];
arr[0] =  0;
arr[1] =  1;
arr.foo = 'c';
console.log(arr.length)

運行結果爲2,當時我想會報錯,結果錯了,數組的實例本身也是一個對象,可不要忘記typeof ary的結果可是object的,arr.length可以認爲是arr的屬性,那麼同理,arr.foo也可以認爲是給arr添加了一個屬性foo,這個屬性的值爲’c’


var obj = {};
obj.log = console.log;
obj.log.call(console, this);   //window對象

在這個題目中就算把,console換成obj,null等,結果都是widow對象,因爲調用call中傳遞的this本身就是window


1 == true //true
undefined==null  //true

undefined值是派生自null值的,undefined === null爲false


屬於ajax事件??

$.post(url)是ajax請求; 
ajax的事件是: 
ajaxComplete(callback) 
ajaxError(callback) 
ajaxSend(callback) 
ajaxStart(callback) 
ajaxStop(callback) 
ajaxSuccess(callback)

輸出的結果是??

var a, b;
(function() {
  alert(a);
  alert(b);
  var a = b= 3;
  alert(a);
  alert(b);
})();

alert(a);
alert(b);

第一次輸出的a是局部a,爲undefined,輸出的b爲全局b,爲undefined

第二次輸出的a是局部a,已經賦值爲3,輸出的b爲全局b,爲3

第三次輸出的a、b都爲全局,則a是undefined,b爲3


執行結果??

var A = {n : 4399};
var B = function() { this.n = 9999; };
var C = function() {var n = 8888; }
B.prototype = A;
C.prototype = A;
var b = new B();
var c = new C();
A.n++;
console.log(b.n);   //9999
console.log(c.n);   //4400

首先B和C的原型對象變爲了A對象,也就是說B和C的實例的原型鏈上肯定是有n屬性的,對於b而言,執行了構造函數,所以這個實例自己是含有n的,所以輸出的是9999,原型鏈上向來是找到了就停止尋找了,對於C只能沿着原型鏈去尋找了,所以找到4400


在JS裏判斷一個對象oStringObject是否爲String??

console.log(typeof new String('aaa'));   //'object'

在這種情況下typeof是不能作爲判斷的方法的,這個時候就需要instanceof

oStringObject instanceof String

運行結果??

var msg = 'hello';

for(var i = 0; i < 10; i++) {
  var msg = 'hello' + i * 2 + i;
}

alert(msg);  //hello189

for循環中的聲明會被忽略,因爲此時全局對象中已經聲明瞭a,所以for循環做的只是每次給msg賦予不同的值,最後輸出的是i = 9的計算結果,所以輸出hello189


console.log(([])?true:false);    //true
console.log(([]==false?true:false));  //true
console.log(({}==false)?true:false)   //false

Boolean([]); //true
Boolean({}); //true
Number([]); //0
Number({}); // NaN
Number(false); //0

“==”運算符比較**“喜歡”**Number類型(但是null == 0 與 undefined == 0的結果是false),所以前面三個輸出可以轉換爲

console.log(true ? true:false);
console.log((0 == 0) ? true : false);
console.log((NaN == 0 ? true : false));

輸出結果??

(function() {
      var a = b = 5;
  })();   
console.log(b);
console.log(a);

5,Uncaught ReferenceError: a is not defined

a是沒有被聲明的,但是window.a爲undefined

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章