摘要:提示函數通常用于檢測和的結果,以判斷它們表示的是否是合法的數字。與運算多個布爾類型相與,若其中存在一個及以上的,則結果為,否則為。
undefined 與 null以下所用測試代碼可以訪問 RunJS 查看
如果定義一個變量卻不賦值,則其默認等于 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
對于 undefined 和 null,由于前者是由后者派生而出的,所以其二者使用 == 比較時是相等的,因而若要對二者進行區分,則需要使用 === 或 typeof:
undefined == null; // true undefined === null; // false typeof(undefined) == typeof(null); // falseNaN
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)); }
注:parseInt 和 parseFloat 方法在轉換失敗時會返回 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
摘要:如果左側表達式的值為真值,則返回右側表達式的值否則返回左側表達式的值。遇到真愛就返回中運算符的運算法則如下返回遇到的第一個真值或者最后一個值。輸出為將表達式進行強制轉化為值的運算,運算結果為或者。 bool值轉換 數據類型 bool值轉化 undefined undefined 轉化為 false Object null 轉化為false,其他為 true Boole...
摘要:業務越復雜,邏輯就越復雜,判斷就越多比較判斷比較判斷是比較兩個值,返回一個布爾值,表示是否滿足比較條件。對于非布爾值的數據,取反運算符會自動將其轉為布爾值。 前端學習:教程&開發模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:========== JavaScript-判斷 代碼中,多多少少會有判斷語句。業務越復雜,邏輯就越...
本篇文章主要是講述在JavaScript中判斷兩個值相等,不要認為很簡單,要注意的是在JavaScript中存在4種不同的相等邏輯。 ECMAScript 是 JavaScript 的語言規范,在ECMAScript 規范中存在四種相等算法,如下圖所示: 上圖中每個依次寫下來,很多前端應該熟悉嚴格相等和非嚴格相等,但對于同值零和同值卻不熟悉,現在就依次下面四種方法。 同值 同值零 非...
摘要:系統內部會自動調用函數。因此除了以下五個值,其他都是自動轉為。空字符串自動轉換為字符串遇到預期為字符串的地方,就會將非字符串的值自動轉為字符串。字符串的自動轉換,主要發生在字符串的加法運算時。 URL后面#號是代表什么? # 代表頁面中的某個位置,也稱為地址hash值 #XX 作用當前可視區域移動到頁面xx位置 # 僅對瀏覽器起作用,對服務器無用,所以HTTP請求不包括#(#之后的字...
閱讀 1460·2021-11-22 14:44
閱讀 2843·2021-11-16 11:44
閱讀 3206·2021-10-13 09:40
閱讀 1980·2021-10-08 10:04
閱讀 2363·2021-09-24 10:28
閱讀 2909·2021-09-06 15:02
閱讀 2957·2019-08-30 15:52
閱讀 2392·2019-08-30 13:20