国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 中的 null undefined NaN 及 && 與 ||

Chao / 3036人閱讀

摘要:提示函數通常用于檢測和的結果,以判斷它們表示的是否是合法的數字。與運算多個布爾類型相與,若其中存在一個及以上的,則結果為,否則為。

以下所用測試代碼可以訪問 RunJS 查看

undefined 與 null

如果定義一個變量卻不賦值,則其默認等于 undefined

var foo;
console.log(foo); // undefined

也可以對其賦值 undefined

var undef = undefined;
console.log(undef); // undefined

調用函數時,傳入的參數少于所需參數,未傳入的參數也為 undefined

bar(1, 2);
function bar(a, b, c){
    console.log(a, b, c); // 1, 2, undefined
}

使用 new Array(n) 的形式初始化一個長度為 n 的數組時,數組中的值默認為 undefined

var arr = new Array(3);
console.log(arr); // [undefined × 3]

這里要注意使用 var arr = new Array(1, 2, 3)var arr = [3] 與上述初始化方法的區別。

獲取某對象不存在的屬性或數組中不存在的值時,也會返回 undefined

var element = {};
console.log(element.nonAttr);  // undefined

var arr = [];
console.log(arr[1]);  // undefined

var obj = new Object();
console.log(obj.nonAttr);  // undefined

直接獲取 DOM 元素非原生屬性或未賦值的原生屬性時,會返回 undefined

將一個不存在的 DOM 對象賦值給一個變量時,該變量為 null

var foo = document.getElementById("notExists");
console.log(foo); // null

也可以將變量賦值為 null

var nullVal = null;
console.log(nullVal); // null

對于 undefinednull,由于前者是由后者派生而出的,所以其二者使用 == 比較時是相等的,因而若要對二者進行區分,則需要使用 ===typeof

undefined == null;                   // true
undefined === null;                  // false
typeof(undefined) == typeof(null);   // false
NaN

NaN( Not a Number ),表示非數字。任何值都不與 NaN 相等,甚至是它自己;

1          == NaN   // false
""         == NaN   // false
" "        == NaN   // false
"abc"      == NaN   // false
[]         == NaN   // false
{}         == NaN   // false
null       == NaN   // false
undefined  == NaN   // false
NaN        == NaN   // false

我們可以使用 isNaN 來判斷一個值是否為 NaN

isNaN( 1 )            // false
isNaN( "" )           // false
isNaN( " " )          // false
isNaN( "abc" )        // true
isNaN( [] )           // false
isNaN( {} )           // true
isNaN( null )         // false
isNaN( undefined )    // true
isNaN( NaN )          // true

注意,由于部分非數字的 isNaN() 結果也為 false,所以若要判斷一個值是否為數字,需要使用如下方法:

isNumber( 1 )          // true
isNumber( "" )         // false
isNumber( " " )        // false
isNumber( "abc" )      // false
isNumber( [] )         // false
isNumber( {} )         // false
isNumber( null )       // false
isNumber( undefined )  // false
isNumber( NaN )        // false

// 判斷一個值是否為數字
function isNumber(value){
    return !isNaN(parseFloat(value));
}

注:parseIntparseFloat 方法在轉換失敗時會返回 NaN

提示:isNaN() 函數通常用于檢測 parseFloat() 和 parseInt() 的結果,以判斷它們表示的是否是合法的數字。當然也可以用 isNaN() 函數來檢測算數錯誤,比如用 0 作除數的情況。

「與」運算:&&

多個布爾類型相「與」,若其中存在一個及以上的 false,則結果為 false,否則為 true。且在「與」運算中存在「短路」,即遇到第一個 false 之后的內容不會運行。

true && true  && false && true   // false
true && true  && true  && true    // true
true && false && i++   && j--     // false, i 和 j 的值不會變化

問題來了,如果這里參與「與」運算的不全是布爾類型呢?

true && 11 && "string" && {}   // 輸出什么?

在討論這個問題之前,我們先看一看以下兩組變量的值:

0         == true     // false
-123      == true     // false
123       == true     // false
""        == true     // false
"string"  == true     // false
[]        == true     // false
[1,2,3]   == true     // false
null      == true     // false
undefined == true     // false
NaN       == true     // false
{}        == true     // Uncaught SyntaxError
Boolean( 0 )          // false
Boolean( -123 )       // true
Boolean( 123 )        // true
Boolean( "" )         // false
Boolean( "string" )   // true
Boolean( [] )         // true
Boolean( [1,2,3] )    // true
Boolean( null )       // false
Boolean( undefined )  // false
Boolean( NaN )        // false
Boolean( {} )         // true

然后我們做如下測試:

true  && false                // false
true  && NaN                  // NaN
true  && null                 // null
true  && []                   // []
0     && []                   // 0
true  && "AAA" && undefined   // undefined
true  && "AAA" && "BBB"       // BBB
false && "AAA" && "BBB"       // false

這里我們發現,「與」運算的結果并不一定是布爾值。結合上述 Boolean(xx) 形式結果,可以得出猜測:「與」運算的結果取決于第一個Boolean(xx) 轉換結果false 的值;若全部皆為 true,則結果為最后一個值。

以之前的問題為例,對于 true && 11 && "string" && {},我們可以將其轉換為:

true && Boolean(11) && Boolean("string") && Boolean({})

由于這四個值的結果均為 true,因而 true && 11 && "string" && {} 的結果即為最后一個值,即:{}

同理,我們可以得知,true && 0 && "string" && {}true && [] && "" && null 的值分別為:0""

「或」運算:||

同 && 「與」運算類似,「或」運算的結果也不一定為布爾類型,其結果取決于第一個Boolean() 結果true 的值,若全部為 false,則結果為最后一個元素的值,如以下例子:

true  || false                // true
true  || NaN                  // true
true  || null                 // true
true  || []                   // true
0     || []                   // []
true  || "AAA" || undefined   // true
true  || "AAA" || "BBB"       // true
false || "AAA" || "BBB"       // "AAA"

參考:

JS中Null與Undefined的區別 - 博客園

為什么 javascript 中 Boolean... - 百度知道

JavaScript isNaN() 函數 - w3school

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81771.html

相關文章

  • js中的bool值轉換"&&" 、"||"

    摘要:如果左側表達式的值為真值,則返回右側表達式的值否則返回左側表達式的值。遇到真愛就返回中運算符的運算法則如下返回遇到的第一個真值或者最后一個值。輸出為將表達式進行強制轉化為值的運算,運算結果為或者。 bool值轉換 數據類型 bool值轉化 undefined undefined 轉化為 false Object null 轉化為false,其他為 true Boole...

    hufeng 評論0 收藏0
  • 溫故js系列(9)-相等==&嚴格相等===&代碼里的那些判斷

    摘要:業務越復雜,邏輯就越復雜,判斷就越多比較判斷比較判斷是比較兩個值,返回一個布爾值,表示是否滿足比較條件。對于非布爾值的數據,取反運算符會自動將其轉為布爾值。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:========== JavaScript-判斷 代碼中,多多少少會有判斷語句。業務越復雜,邏輯就越...

    libin19890520 評論0 收藏0
  • 解析JavaScript判斷兩個值相等的方法

      本篇文章主要是講述在JavaScript中判斷兩個值相等,不要認為很簡單,要注意的是在JavaScript中存在4種不同的相等邏輯。  ECMAScript 是 JavaScript 的語言規范,在ECMAScript 規范中存在四種相等算法,如下圖所示:  上圖中每個依次寫下來,很多前端應該熟悉嚴格相等和非嚴格相等,但對于同值零和同值卻不熟悉,現在就依次下面四種方法。  同值  同值零  非...

    3403771864 評論0 收藏0
  • JS Q&A

    摘要:系統內部會自動調用函數。因此除了以下五個值,其他都是自動轉為。空字符串自動轉換為字符串遇到預期為字符串的地方,就會將非字符串的值自動轉為字符串。字符串的自動轉換,主要發生在字符串的加法運算時。 URL后面#號是代表什么? # 代表頁面中的某個位置,也稱為地址hash值 #XX 作用當前可視區域移動到頁面xx位置 # 僅對瀏覽器起作用,對服務器無用,所以HTTP請求不包括#(#之后的字...

    URLOS 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<