摘要:中九個內置對象在規范中定義了六種數據類型其中原始值類型有種,引用類型有種一有包裝對象數值型,包括整形和浮點型其中都是類型二有包裝對象字符串類型,有兩種表示方式,雙引號單引號。方法可以將任意類型數據轉成字符串。
JS中九個內置對象 在ECMAScript規范(ES5)中定義了六種數據類型: 其中原始值類型有5種,引用類型有1種
(一)Number (有包裝對象 - new Number())數值型,包括整形和浮點型
其中NaN,infinity都是Number類型
(二)String (有包裝對象 - new String())字符串類型,有兩種表示方式,a: 雙引號、b: 單引號。
在String.prototype原型上擴展了一些方法如toString()、valueOf、indexOf()、chartAt()、charCodeAt()等等。
String()方法可以將任意類型數據轉成字符串。
在JS中有三種方法可以變量轉成字符串:
variable.toString() 此方法對null和undefined不可以,因為他們沒有對應的包裝對象
""+variable
String(variable)
(三)Boolean (有包裝對象 - new Boolean())1、只有兩個值,true、false,區分大小寫
2、在JS的條件表達式或三目運算中,變量可以隱式轉成Boolean值,
3、在JS中非Boolean類型的數據都可以轉成Boolean類型,其中0、-0、null、
undefined、""、NaN等6種會轉成false,其余的都成true,即便是空對象{}、空數組[]、空函數function(){} 也是看做true
(四)Undefined (沒有包裝對象)只有一個值undefined,沒有任何屬性和方法,但是undefined不屬于保留字或關鍵字,在低版本瀏覽器中undefined可以被修改,為了得到純正的undefined,可以使用一元操作符void 0,那么在JS代碼中可以讓一個變量和void 0做比較,就可以準確判斷出是否是undefined啦。
variable === undefined // 如果變量variable未聲明,直接使用,則會報錯,"Uncaught ReferenceError: variable is not defined" typeof variable === "undefined" // typeof操作符是唯一一個使用一個未聲明的變量時是不會報錯的(判斷一個變量是否是undefined,推薦用此方法) undefined === void 0 // true,void 0 可以得到純正的undefined
在JS中有哪些情況會返回undefined ?
變量只聲明未賦值(包括函數參數,沒傳參數時也是undefined)
訪問一個對象不存在的屬性
調用函數時沒有明確指定返回值
使用void操作符對任意合法的js表達式運算
(五)Null (沒有包裝對象)只有一個值null,沒有任何屬性和方法,在JS最初設計時,表示期望賦值為一個對象,可以理解為一個空指針,所以用
typeof操作符檢測時,返回object
typeof null // object
(六)Objectundefined 與 null的區別大概5點在JS中使用typeof操作符時,Array、Date、RegExp的實例和Math都是"object"。
null是JS的關鍵字,undefined不是
在es3中,undefined是可以進行讀/寫操作的。
在es5中得到修正,undefined是只讀的, null從來都不可以修改
typeof undefined // "undefined"
typeof null // "object"
強轉數字時,Number()
Number(undefined) -> NaN
Number(null) -> 0
undefined == null // true 只判斷值是否相等
undefined === null // false 即判斷值是否相等,也要判斷類型是否相等
NaN(全稱 Not a Number)表示不是一個數字,是一個特殊的值,NaN不等于任何值(包括自身)。雖然是一個英文字符,但是它是number類型。類似的還有infinity也是number類型
typeof Infinity // "number" typeof NaN // "number" NaN === NaN // false 自身比較
有哪些情況會得到NaN?
無窮大除無窮大
對負數做開方運算
算術運算符參與非數字的運算
字符串轉成數字
因此不能使用==或===來判斷一個變量是否是NaN,那么怎么辦呢?
其實在JS我們可以通過一個全局函數isNaN()來判斷一個變量是否是NaN。但是這個isNaN()有缺陷,它無法100%精準檢測出是否是NaN,
解決方法:(可參考http://ourjs.com/detail/5383e...)
但是在ES5中,可以自己寫方法來判斷,
function _isNaN(num){ return num !== num; } _isNaN("abc"); //
在ES6中,提供了Number.isNaN()可以準確檢測出是否是NaN
typeof 操作符可以檢測出6種類型,但是對數組、對象、null均返回object類型,所以typeof檢測不準確 在JS中用于精準判斷數據類型的方法有三種constructor
// 根據對象的constructor判斷數據類型(undefined、null除外,兩個類型沒有對應的包裝對象`) function Person(){} console.log( p.constructor === Person); console.log( p.constructor === Number ); console.log( p.constructor === String ); console.log( p.constructor === Boolean ); console.log( p.constructor === Object); console.log( p.constructor === Function ); console.log( p.constructor === Date ); console.log( p.constructor === RegExp);
instanceof
// 用于判斷A的原型鏈中,是否存在B的原型 A instanceof B function Person(){} var p=new Person(); console.log( p instanceof Person ); // true console.log( p instanceof Object ); // true
toString
// 在Object對象的原型的toString方法 var p=10; Object.prototype.toString.call(p) === "[object Number]" var p="str"; Object.prototype.toString.call(p) === "[object String]" var p=true; Object.prototype.toString.call(p) === "[object Boolean]" var p=undefined; Object.prototype.toString.call(p) === "[object Undefined]" var p=null; Object.prototype.toString.call(p) === "[object Null]" var p=[1,2,3]; Object.prototype.toString.call(p) === "[object Array]" var p={name:"king"}; Object.prototype.toString.call(p) === "[object Object]" var p=new Date(); Object.prototype.toString.call(p) === "[object Date]" var p=/d+/; Object.prototype.toString.call(p) === "[object RegExp]" var p=function(){} Object.prototype.toString.call(p) === "[object Function]"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107331.html
摘要:中任務分類同步異步同步任務異步任務中異步類型定時任務網絡請求回調函數事件綁定只能傳入一個參數未完待續 JS中任務分類 同步 異步 同步任務 異步任務 JS中異步類型 定時任務 網絡請求 回調函數 事件綁定 Promise(resolve只能傳入一個參數) 未完待續...
摘要:可以將其他類型轉成字符串函數可以將任意類型的值轉為布爾值。提示空數組空對象轉換為布爾型也是。 在JS中數據類型轉換有兩種 相關資料參閱 官方ecma-5規范阮一峰老師類型轉換規范對相等==定義 強制類型轉換Number() Number函數將字符串轉為數值,要比parseInt函數嚴格很多,只要有一個字符是非數字(空格、+、-除外),那么就會被轉為NaN。 showImg(http...
摘要:是一種基于對象的動態弱類型腳本語言以下簡稱,是一種解釋型語言,和其他的編程語言不同,如等編譯型語言,這些語言在代碼執行前會進行通篇編譯,先編譯成字節碼機器碼。然后在執行。 JavaScript是一種基于對象的動態、弱類型腳本語言(以下簡稱JS),是一種解釋型語言,和其他的編程語言不同,如java/C++等編譯型語言,這些語言在代碼執行前會進行通篇編譯,先編譯成字節碼(機器碼)。然后在執...
摘要:繼承理論源于生活又高于生活在中繼承,和現實生活中繼承是相似的如兒子繼承父親財產子女的生理特性有父母的特性身高膚色性格等等只是一定比例上是這樣的,不是絕對的一樣中繼承方法有以下幾種本質區別方法特別注意是本質區別冒充繼承也稱之為借用構造函數這種 JS繼承 理論源于生活、又高于生活 在JS中繼承,和現實生活中繼承是相似的 如:兒子繼承父親財產、子女的生理特性有父母的特性(身高、膚色、性格...
摘要:隨著函數使用場景的不同,而發生變化。是當前執行上下文中的一部分。在中新增了該方法也是強制更改指向。但是和的區別是更改后不會立即執行,它會返回一個新函數。 this何意?在英文中this是一個人稱代詞,表示這個的,具體指哪個?不確定,只有在具體的語境中才可確定,在編程語言中this也有同樣的類似特性。在js中this是一個關鍵字,它不能被當做變量、屬性,也不可以進行賦值操作。this 隨...
閱讀 821·2023-04-25 19:49
閱讀 3756·2021-09-30 09:47
閱讀 2742·2021-09-13 10:21
閱讀 2680·2021-08-24 10:04
閱讀 3168·2019-08-30 15:55
閱讀 2296·2019-08-30 15:55
閱讀 2399·2019-08-30 15:54
閱讀 3472·2019-08-30 13:53