亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

原生JS大揭秘—數(shù)據(jù)類型

luck / 1694人閱讀

摘要:中九個(gè)內(nèi)置對(duì)象在規(guī)范中定義了六種數(shù)據(jù)類型其中原始值類型有種,引用類型有種一有包裝對(duì)象數(shù)值型,包括整形和浮點(diǎn)型其中都是類型二有包裝對(duì)象字符串類型,有兩種表示方式,雙引號(hào)單引號(hào)。方法可以將任意類型數(shù)據(jù)轉(zhuǎn)成字符串。

JS中九個(gè)內(nèi)置對(duì)象

在ECMAScript規(guī)范(ES5)中定義了六種數(shù)據(jù)類型:

其中原始值類型有5種,引用類型有1種
(一)Number (有包裝對(duì)象 - new Number())

數(shù)值型,包括整形和浮點(diǎn)型
其中NaN,infinity都是Number類型

(二)String (有包裝對(duì)象 - new String())

字符串類型,有兩種表示方式,a: 雙引號(hào)、b: 單引號(hào)。
在String.prototype原型上擴(kuò)展了一些方法如toString()、valueOfindexOf()、chartAt()、charCodeAt()等等。
String()方法可以將任意類型數(shù)據(jù)轉(zhuǎn)成字符串。

在JS中有三種方法可以變量轉(zhuǎn)成字符串

variable.toString() 此方法對(duì)null和undefined不可以,因?yàn)樗麄儧]有對(duì)應(yīng)的包裝對(duì)象

""+variable

String(variable)

(三)Boolean (有包裝對(duì)象 - new Boolean())

1、只有兩個(gè)值,truefalse,區(qū)分大小寫
2、在JS的條件表達(dá)式或三目運(yùn)算中,變量可以隱式轉(zhuǎn)成Boolean值,
3、在JS中非Boolean類型的數(shù)據(jù)都可以轉(zhuǎn)成Boolean類型,其中0-0、null、
undefined""、NaN等6種會(huì)轉(zhuǎn)成false,其余的都成true,即便是空對(duì)象{}、空數(shù)組[]空函數(shù)function(){} 也是看做true

(四)Undefined (沒有包裝對(duì)象)

只有一個(gè)值undefined,沒有任何屬性和方法,但是undefined不屬于保留字或關(guān)鍵字,在低版本瀏覽器中undefined可以被修改,為了得到純正的undefined,可以使用一元操作符void 0,那么在JS代碼中可以讓一個(gè)變量和void 0做比較,就可以準(zhǔn)確判斷出是否是undefined啦。

variable === undefined // 如果變量variable未聲明,直接使用,則會(huì)報(bào)錯(cuò),"Uncaught ReferenceError: variable is not defined"
typeof variable === "undefined" // typeof操作符是唯一一個(gè)使用一個(gè)未聲明的變量時(shí)是不會(huì)報(bào)錯(cuò)的(判斷一個(gè)變量是否是undefined,推薦用此方法)
undefined === void 0 // true,void 0 可以得到純正的undefined

在JS中有哪些情況會(huì)返回undefined ?

變量只聲明未賦值(包括函數(shù)參數(shù),沒傳參數(shù)時(shí)也是undefined)

訪問一個(gè)對(duì)象不存在的屬性

調(diào)用函數(shù)時(shí)沒有明確指定返回值

使用void操作符對(duì)任意合法的js表達(dá)式運(yùn)算

(五)Null (沒有包裝對(duì)象)

只有一個(gè)值null,沒有任何屬性和方法,在JS最初設(shè)計(jì)時(shí),表示期望賦值為一個(gè)對(duì)象,可以理解為一個(gè)空指針,所以用
typeof操作符檢測(cè)時(shí),返回object

typeof null // object
(六)Object

在JS中使用typeof操作符時(shí),Array、Date、RegExp的實(shí)例和Math都是"object"

undefinednull的區(qū)別大概5點(diǎn)

null是JS的關(guān)鍵字,undefined不是

在es3中,undefined是可以進(jìn)行讀/寫操作的。
在es5中得到修正,undefined是只讀的, null從來都不可以修改

typeof undefined // "undefined"
typeof null // "object"

強(qiáng)轉(zhuǎn)數(shù)字時(shí),Number()
Number(undefined) -> NaN
Number(null) -> 0

undefined == null // true 只判斷值是否相等
undefined === null // false 即判斷值是否相等,也要判斷類型是否相等

NaN小結(jié)

NaN(全稱 Not a Number)表示不是一個(gè)數(shù)字,是一個(gè)特殊的值,NaN不等于任何值(包括自身)。雖然是一個(gè)英文字符,但是它是number類型。類似的還有infinity也是number類型

typeof Infinity // "number"
typeof NaN // "number"
NaN === NaN // false 自身比較

有哪些情況會(huì)得到NaN?

無窮大除無窮大

對(duì)負(fù)數(shù)做開方運(yùn)算

算術(shù)運(yùn)算符參與非數(shù)字的運(yùn)算

字符串轉(zhuǎn)成數(shù)字

因此不能使用=====來判斷一個(gè)變量是否是NaN,那么怎么辦呢?
其實(shí)在JS我們可以通過一個(gè)全局函數(shù)isNaN()來判斷一個(gè)變量是否是NaN。但是這個(gè)isNaN()有缺陷,它無法100%精準(zhǔn)檢測(cè)出是否是NaN,
解決方法:(可參考http://ourjs.com/detail/5383e...)
但是在ES5中,可以自己寫方法來判斷,

function _isNaN(num){
    return num !== num;
}
_isNaN("abc"); //

在ES6中,提供了Number.isNaN()可以準(zhǔn)確檢測(cè)出是否是NaN

typeof 操作符可以檢測(cè)出6種類型,但是對(duì)數(shù)組、對(duì)象、null均返回object類型,所以typeof檢測(cè)不準(zhǔn)確

在JS中用于精準(zhǔn)判斷數(shù)據(jù)類型的方法有三種

constructor

// 根據(jù)對(duì)象的constructor判斷數(shù)據(jù)類型(undefined、null除外,兩個(gè)類型沒有對(duì)應(yīng)的包裝對(duì)象`)
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對(duì)象的原型的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]"

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107331.html

相關(guān)文章

  • 原生JS揭秘—同步與異步

    摘要:中任務(wù)分類同步異步同步任務(wù)異步任務(wù)中異步類型定時(shí)任務(wù)網(wǎng)絡(luò)請(qǐng)求回調(diào)函數(shù)事件綁定只能傳入一個(gè)參數(shù)未完待續(xù) JS中任務(wù)分類 同步 異步 同步任務(wù) 異步任務(wù) JS中異步類型 定時(shí)任務(wù) 網(wǎng)絡(luò)請(qǐng)求 回調(diào)函數(shù) 事件綁定 Promise(resolve只能傳入一個(gè)參數(shù)) 未完待續(xù)...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 原生JS揭秘—揭開數(shù)據(jù)類型轉(zhuǎn)換的面紗

    摘要:可以將其他類型轉(zhuǎn)成字符串函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。提示空數(shù)組空對(duì)象轉(zhuǎn)換為布爾型也是。 在JS中數(shù)據(jù)類型轉(zhuǎn)換有兩種 相關(guān)資料參閱 官方ecma-5規(guī)范阮一峰老師類型轉(zhuǎn)換規(guī)范對(duì)相等==定義 強(qiáng)制類型轉(zhuǎn)換Number() Number函數(shù)將字符串轉(zhuǎn)為數(shù)值,要比parseInt函數(shù)嚴(yán)格很多,只要有一個(gè)字符是非數(shù)字(空格、+、-除外),那么就會(huì)被轉(zhuǎn)為NaN。 showImg(http...

    Moxmi 評(píng)論0 收藏0
  • 原生JS揭秘JS代碼底層運(yùn)行原理

    摘要:是一種基于對(duì)象的動(dòng)態(tài)弱類型腳本語言以下簡(jiǎn)稱,是一種解釋型語言,和其他的編程語言不同,如等編譯型語言,這些語言在代碼執(zhí)行前會(huì)進(jìn)行通篇編譯,先編譯成字節(jié)碼機(jī)器碼。然后在執(zhí)行。 JavaScript是一種基于對(duì)象的動(dòng)態(tài)、弱類型腳本語言(以下簡(jiǎn)稱JS),是一種解釋型語言,和其他的編程語言不同,如java/C++等編譯型語言,這些語言在代碼執(zhí)行前會(huì)進(jìn)行通篇編譯,先編譯成字節(jié)碼(機(jī)器碼)。然后在執(zhí)...

    xiongzenghui 評(píng)論0 收藏0
  • 原生JS揭秘—看清JS繼承本質(zhì)

    摘要:繼承理論源于生活又高于生活在中繼承,和現(xiàn)實(shí)生活中繼承是相似的如兒子繼承父親財(cái)產(chǎn)子女的生理特性有父母的特性身高膚色性格等等只是一定比例上是這樣的,不是絕對(duì)的一樣中繼承方法有以下幾種本質(zhì)區(qū)別方法特別注意是本質(zhì)區(qū)別冒充繼承也稱之為借用構(gòu)造函數(shù)這種 JS繼承 理論源于生活、又高于生活 在JS中繼承,和現(xiàn)實(shí)生活中繼承是相似的 如:兒子繼承父親財(cái)產(chǎn)、子女的生理特性有父母的特性(身高、膚色、性格...

    sutaking 評(píng)論0 收藏0
  • 原生JS揭秘—撩開this的面紗

    摘要:隨著函數(shù)使用場(chǎng)景的不同,而發(fā)生變化。是當(dāng)前執(zhí)行上下文中的一部分。在中新增了該方法也是強(qiáng)制更改指向。但是和的區(qū)別是更改后不會(huì)立即執(zhí)行,它會(huì)返回一個(gè)新函數(shù)。 this何意?在英文中this是一個(gè)人稱代詞,表示這個(gè)的,具體指哪個(gè)?不確定,只有在具體的語境中才可確定,在編程語言中this也有同樣的類似特性。在js中this是一個(gè)關(guān)鍵字,它不能被當(dāng)做變量、屬性,也不可以進(jìn)行賦值操作。this 隨...

    Brenner 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<