JavaScript中令你抓狂的魔術變量
2024-09-06 12:44:20
供稿:網友
在存在這么一個變量 tt, 它滿足下面的代碼.
代碼執行完畢后 ,errCount=0 而且 斷言函數也從未 alert 信息
代碼如下:
代碼如下:<script>
var tt=/* 請在這里定義tt */;
var errCount=0 //全局變量,用來記錄 assert 函數出現斷言宣告的次數
/*
斷言函數
如果v為假,該函數就 alert("assert error"),并累加計數器 errCount
如果v為真,就什么也不做
*/
function assert(v) {
if (!v) {
alert("assert error");
errCount++;
}
}
assert((tt || true) == false)
assert((tt || false) == false)
assert((tt && true) == true)
assert((tt && false) == false)
assert((true || tt ) == true)
assert((tt || true ) == false)
assert((false || tt ) == false)
assert((tt || false ) == false)
assert((true && tt) == false)
assert((tt && true ) == true)
assert((false && tt ) == false)
assert((tt && false ) == false)
assert((tt ? true : false) == true)
assert((tt == false) == true)
assert((!tt == tt ) == true)
assert((tt + '') == "false")
assert(tt == false)
alert(errCount) //結果是打印 0
</script>
同發 CSDN: JavaScript中的魔術變量
這個問題是我一個同事在下班后考我的一個題目.我當時想了很久,也嘗試了很久.
得到如下答案,能滿足題目的要求.
答案如下:
var tt=new Object(false);
var tt=new Boolean();
var tt=new Boolean(false);
通過這個題目我們足可以感受到js的靈活,更可以加深對js的理解.
我以前經常在代碼中使用如下判斷
if (a){
alert('ok')
}
現在看來,這樣寫的邏輯隱患是非常大的.
借csdn中一個網友的精彩回復來解釋一下上面的問題