欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中令你抓狂的魔術(shù)變量

 更新時間:2006年11月30日 00:00:00   作者:  
在存在這么一個變量 tt, 它滿足下面的代碼.
代碼執(zhí)行完畢后 ,errCount=0 而且 斷言函數(shù)也從未 alert 信息
代碼如下: 
 
復(fù)制代碼 代碼如下:
<script> 
 var tt=/* 請在這里定義tt */; 
 var errCount=0  //全局變量,用來記錄 assert 函數(shù)出現(xiàn)斷言宣告的次數(shù) 
/* 
 斷言函數(shù) 
 如果v為假,該函數(shù)就 alert("assert error"),并累加計數(shù)器 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)  //結(jié)果是打印 0 

 </script> 
  

同發(fā) CSDN: JavaScript中的魔術(shù)變量
這個問題是我一個同事在下班后考我的一個題目.我當時想了很久,也嘗試了很久.
得到如下答案,能滿足題目的要求.
答案如下:
var tt=new Object(false);
var tt=new Boolean();
var tt=new Boolean(false);
通過這個題目我們足可以感受到j(luò)s的靈活,更可以加深對js的理解.
我以前經(jīng)常在代碼中使用如下判斷
if (a){
  alert('ok')
}
現(xiàn)在看來,這樣寫的邏輯隱患是非常大的.
借csdn中一個網(wǎng)友的精彩回復(fù)來解釋一下上面的問題
||是這樣運算的:從第一個開始,遇到有意義的返回,否則返回最后一個表達式(注意不一定是Boolean值);
&&是這樣運算的:從第一個開始,遇到無意義的返回,否則返回最后一個表達式(注意同上);
!是這樣運算的:對表達式的值取非(注意不是對表達式)。
什么是無意義呢:如下六個 0,null,undefined,"",false,NaN
除此,視為有意義。
new Boolean(),new Boolean(false)是同一個東西,由于它是一個對象,故是有意義的,但其值為false,所以,可以看為“有意義的false”,這樣,就可以解釋所有的問題了。
new Object(false),也是有意義的,其值也為false,只不過其類型為Object,而new Boolean()其類型為Boolean而已。
再提醒一點:||與&&這兩個運算符不是對值的運算,即在運算過程中不管表達式的值,而是對表達式本身進行運算;
這兩個運算符對表達式究竟如何運算?
答:只管表達式是否有意義,而不管其值幾何。
對于表達式,無意義的只有6個;這里要注意:所有以new方式生成的對象為動態(tài)對象,動態(tài)對象均視為有意義
再舉例兩個說明:
一、0||false||new Boolean(false)
運算如下:
首先:0是一個常數(shù),剛好是無意義之一,故繼續(xù);而false也是無意義之一,故再繼續(xù);new Boolean(false)為動態(tài)對象,有意義,故上面運算結(jié)果為new Boolean(false)
二、0||new Boolean(false)||true
這會是什么結(jié)果?很多人不注意就會以為結(jié)果為true,但這是不對的。
先說答案:結(jié)果同上
首先:0是一個常數(shù),剛好是無意義之一,故繼續(xù);new Boolean(false)為動態(tài)對象,有意義;這里已經(jīng)找到有意義的表達式,故不再往下運算了。所以結(jié)果同上。
=====
對&&運算符,同理,不再多說。
題外話:
  有意思的是,在答案出來后,我們還采用了一些非常規(guī)手段的答這個題(僅供娛樂)

var tt=window["assert"]=new Function();
這句話的意思相當于下面兩行代碼 
function assert(){} 
function tt(){} 
javascript允許重復(fù)定義函數(shù),執(zhí)行的時候以以后一個為準。

相關(guān)文章

  • js實現(xiàn)登錄驗證碼

    js實現(xiàn)登錄驗證碼

    本文主要介紹了js實現(xiàn)登錄驗證碼的方法,代碼簡潔明了,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • js for循環(huán)倒序輸出數(shù)組元素的實例

    js for循環(huán)倒序輸出數(shù)組元素的實例

    下面小編就為大家?guī)硪黄猨s for循環(huán)倒序輸出數(shù)組元素的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 理解 javascript 中的函數(shù)表達式與函數(shù)聲明

    理解 javascript 中的函數(shù)表達式與函數(shù)聲明

    這篇文章主要介紹了理解 javascript 中的函數(shù)表達式與函數(shù)聲明,需要的朋友可以參考下
    2017-07-07
  • JS淺拷貝和深拷貝原理與實現(xiàn)方法分析

    JS淺拷貝和深拷貝原理與實現(xiàn)方法分析

    這篇文章主要介紹了JS淺拷貝和深拷貝原理與實現(xiàn)方法,結(jié)合實例形式分析了javascript淺拷貝及深拷貝相關(guān)概念、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2019-02-02
  • JavaScript運行機制之事件循環(huán)(Event Loop)詳解

    JavaScript運行機制之事件循環(huán)(Event Loop)詳解

    這篇文章主要介紹了JavaScript運行機制之事件循環(huán)(Event Loop)詳解,本文從多個方面講解了Event Loop,需要的朋友可以參考下
    2014-10-10
  • JS實現(xiàn)提示效果彈出及延遲隱藏的功能

    JS實現(xiàn)提示效果彈出及延遲隱藏的功能

    這篇文章主要介紹了JS實現(xiàn)提示效果彈出及延遲隱藏的功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Nuxt.js開啟SSR渲染的教程詳解

    Nuxt.js開啟SSR渲染的教程詳解

    Nuxt.js 是一個基于 Vue.js 的通用應(yīng)用框架。 通過對客戶端/服務(wù)端基礎(chǔ)架構(gòu)的抽象組織,Nuxt.js 主要關(guān)注的是應(yīng)用的 UI渲染。這篇文章主要介紹了Nuxt.js開啟SSR渲染 ,需要的朋友可以參考下
    2018-11-11
  • 千萬別錯過的JavaScript?sort方法使用指南

    千萬別錯過的JavaScript?sort方法使用指南

    sort方法在我們的日常開發(fā)中是經(jīng)常使用的,sort方法一般是用來對數(shù)組進行排序的,但是你是否知道sort方法默認是按什么方式排序的呢?下面就和我一起來深入了解sort方法吧
    2023-05-05
  • javascript設(shè)計模式 – 工廠模式原理與應(yīng)用實例分析

    javascript設(shè)計模式 – 工廠模式原理與應(yīng)用實例分析

    這篇文章主要介紹了javascript設(shè)計模式 – 工廠模式,結(jié)合實例形式分析了javascript工廠模式基本概念、原理、定義、應(yīng)用場景及相關(guān)操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 原生JavaScript實現(xiàn)幻燈片效果

    原生JavaScript實現(xiàn)幻燈片效果

    這篇文章主要為大家詳細介紹了原生JavaScript實現(xiàn)幻燈片效果,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02

最新評論