JavaScript中 !,!!,!!!(一個(gè),兩個(gè),三個(gè)感嘆號(hào))的含義 | 您所在的位置:網(wǎng)站首頁 › 屬雞今年怎樣破小人 › JavaScript中 !,!!,!!!(一個(gè),兩個(gè),三個(gè)感嘆號(hào))的含義 |
參考文章 :https://blog.csdn.net/buppt/article/details/77726809,lx_1024 js一個(gè)兩個(gè)三個(gè)感嘆號(hào)的區(qū)別 今天寫React時(shí)判斷一個(gè)時(shí)間組件的傳值是否為空數(shù)據(jù) [ ] 時(shí),用 !! 來判斷的,然并卵,并沒有起到判斷的作用,于是就找資源學(xué)習(xí)一下? js 的 ! (感嘆號(hào)) 到底怎么用,有什么含義,順便寫篇文章記錄一下 js?中的?!?的含義:js 中,! 表示運(yùn)算符“非”,如果變量不是布爾類型,會(huì)將變量自動(dòng)轉(zhuǎn)化為布爾類型再取非,!! ( ?兩個(gè)感嘆號(hào)),就可以將變量轉(zhuǎn)化為對應(yīng)布爾值,!!!(三個(gè)感嘆號(hào))沒有什么意義,和一個(gè)感嘆號(hào)的效果是一樣的。一般他們認(rèn)為 !! 表示將一個(gè)變量轉(zhuǎn)為boolean型,再加一個(gè)!是對boolean型取反,和 !false 或者 !true 一樣。 那么,哪些值轉(zhuǎn)換成布爾值為true呢 ?以及 在 !,!!,!!!運(yùn)算后的值又是什么樣的 我們先定義幾個(gè)函數(shù): testObjISTrueOrFalse: function(obj) { this.trueOrFalse(obj) this.trueOrFalseOfOne(obj) this.trueOrFalseOfTwo(obj) this.trueOrFalseOfThree(obj) }, trueOrFalse: function(obj) { if (obj) { console.log(obj + '_trueOrFalse', 'true') } else { console.log(obj + '_trueOrFalse', 'false') } }, trueOrFalseOfOne: function(obj) { console.log(obj + '_trueOrFalseOfOne', !obj) }, trueOrFalseOfTwo: function(obj) { console.log(obj + '_trueOrFalseOfTwo', !!obj) }, trueOrFalseOfThree: function(obj) { console.log(obj + '_trueOrFalseOfThree', !!!obj) }依次測試?undefined,null,空字符串,負(fù)0,正0,不確定數(shù)值,布爾值false,布爾值true,字符串0,數(shù)字1,數(shù)字無窮大,字符串true,字符串false,空數(shù)組,空對象,函數(shù) var arr = [undefined, null, '', -0, 0, NaN, false, true, '0', 1, Infinity, 'true','false', [], {}, function() {}] for (var i = 0; i < arr.length; i++) { this.testObjISTrueOrFalse(arr[i]) }測試結(jié)果如下: undefined_trueOrFalse false undefined_trueOrFalseOfOne true undefined_trueOrFalseOfTwo false undefined_trueOrFalseOfThree true null_trueOrFalse false null_trueOrFalseOfOne true null_trueOrFalseOfTwo false null_trueOrFalseOfThree true _trueOrFalse false _trueOrFalseOfOne true _trueOrFalseOfTwo false _trueOrFalseOfThree true 0_trueOrFalse false 0_trueOrFalseOfOne true 0_trueOrFalseOfTwo false 0_trueOrFalseOfThree true 0_trueOrFalse false 0_trueOrFalseOfOne true 0_trueOrFalseOfTwo false 0_trueOrFalseOfThree true NaN_trueOrFalse false NaN_trueOrFalseOfOne true NaN_trueOrFalseOfTwo false NaN_trueOrFalseOfThree true false_trueOrFalse false false_trueOrFalseOfOne true false_trueOrFalseOfTwo false false_trueOrFalseOfThree true true_trueOrFalse true true_trueOrFalseOfOne false true_trueOrFalseOfTwo true true_trueOrFalseOfThree false 0_trueOrFalse true 0_trueOrFalseOfOne false 0_trueOrFalseOfTwo true 0_trueOrFalseOfThree false 1_trueOrFalse true 1_trueOrFalseOfOne false 1_trueOrFalseOfTwo true 1_trueOrFalseOfThree false Infinity_trueOrFalse true Infinity_trueOrFalseOfOne false Infinity_trueOrFalseOfTwo true Infinity_trueOrFalseOfThree false true_trueOrFalse true true_trueOrFalseOfOne false true_trueOrFalseOfTwo true true_trueOrFalseOfThree false false_trueOrFalse true false_trueOrFalseOfOne false false_trueOrFalseOfTwo true false_trueOrFalseOfThree false _trueOrFalse true _trueOrFalseOfOne false _trueOrFalseOfTwo true _trueOrFalseOfThree false [object Object]_trueOrFalse true [object Object]_trueOrFalseOfOne false [object Object]_trueOrFalseOfTwo true [object Object]_trueOrFalseOfThree false function () {}_trueOrFalse true function () {}_trueOrFalseOfOne false function () {}_trueOrFalseOfTwo true function () {}_trueOrFalseOfThree false可以看到前面7個(gè)值都是false,?后面9個(gè)值都是true undefined 和 null 為 false,任意數(shù)組,對象,函數(shù)(函數(shù)是特殊的對象)都轉(zhuǎn)化為真,即使是空數(shù)組,空對象。 空字符串為false,非空字符串為true。 數(shù)值正負(fù)0,不確定值為false,其它為true , 無窮大也是 true。 字符串"0"?和 數(shù)值0?可以相互轉(zhuǎn)換,但它們轉(zhuǎn)換為不同的布爾值,即0可轉(zhuǎn)換為"0″,"0″可轉(zhuǎn)換為true,但 0 卻轉(zhuǎn)換為false,可見Javascript中類型轉(zhuǎn)換不具有傳遞性。 一個(gè)更有趣的現(xiàn)象是布爾值false會(huì)轉(zhuǎn)化為字符串”false”,而字符串”false”卻轉(zhuǎn)換為布爾值true,測試結(jié)果也可看出,代碼就參考備注的第一個(gè)文章博主的吧 document.write(new String(false)); document.write(new Boolean("false"));結(jié)果為 :?false? , true 如果將對象用來作為條件表達(dá)式判斷條件,不需要使用!!進(jìn)行轉(zhuǎn)換,Javascript會(huì)自動(dòng)轉(zhuǎn)換,(還是要注意不同對象轉(zhuǎn)換的結(jié)果會(huì)有一點(diǎn)理解上的偏差)? |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有 |