溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript 精粹 基礎(chǔ) 進(jìn)階(1)數(shù)據(jù)類(lèi)型

發(fā)布時(shí)間:2020-06-06 03:21:07 來(lái)源:網(wǎng)絡(luò) 閱讀:165 作者:huanghanzhilian 欄目:web開(kāi)發(fā)

轉(zhuǎn)載請(qǐng)注明出處

原文連接 http://blog.huanghanlian.com/article/5b698e54b8ea642ea9213f49

JavaScript 精粹 基礎(chǔ) 進(jìn)階(1)數(shù)據(jù)類(lèi)型

數(shù)據(jù)類(lèi)型

JavaScript六種數(shù)據(jù)類(lèi)型

JavaScript 精粹 基礎(chǔ) 進(jìn)階(1)數(shù)據(jù)類(lèi)型

JavaScript一共有六種數(shù)據(jù)類(lèi)型,其中有五種原始類(lèi)型,和一種對(duì)象類(lèi)型。

JavaScript 隱式轉(zhuǎn)換

var x='The answer'+42;//The answer42
var y=42+'The answer';//42The answer

這里的加號(hào)可以理解為字符串的拼接

var x="37"-7;    //30
var y="37"+7;    //377

這里的減號(hào)會(huì)理解為減法運(yùn)算,而加號(hào)會(huì)理解為字符串拼接

等于判斷

var x="1.23"==1.23;//true  當(dāng)?shù)扔谝贿吺亲址贿吺菙?shù)字的時(shí)候會(huì)嘗試把字符串轉(zhuǎn)換為數(shù)字再進(jìn)行比較
var y=0==false;//true
var e=null==undefined;//true
var c=new Object()==new Object();//false
var d=[1,2]==[1,2];//false

類(lèi)型不同,嘗試類(lèi)型轉(zhuǎn)換和比較

類(lèi)型不同,嘗試類(lèi)型轉(zhuǎn)換和比較:
null == undefined 相等
number == string 轉(zhuǎn)number 1 == “1.0" // true
boolean == ? 轉(zhuǎn)number 1 == true // true
object == number | string 嘗試對(duì)象轉(zhuǎn)為基本類(lèi)型 new String('hi') == ‘hi’ // true
其它:false

嚴(yán)格等于

a===b
顧名思義,它首先會(huì)判斷等號(hào)兩邊的類(lèi)型,如果兩邊類(lèi)型不同,返回false
如果類(lèi)型相同,
類(lèi)型相同,同===

    var h=null===null;//true   
    var f=undefined===undefined;//true
    var g=NaN===NaN;//false    number類(lèi)型它和任何值比較都不會(huì)相等,包括和它自己
    var l=new Object()===new Object();//false   對(duì)象應(yīng)該用引用去比較,而不是用值去比較,因?yàn)樗鼈儾皇峭耆嗤膶?duì)象。所以我們定義對(duì)象x和y去比較只有這樣才會(huì)是true

JavaScript 包裝對(duì)象

原始類(lèi)型numberstring,boolean這三種原始類(lèi)型都有對(duì)應(yīng)的包裝類(lèi)型。

var a = “string”;
alert(a.length);//6
a.t = 3;
alert(a.t);//undefined

字符串,當(dāng)把一個(gè)基本類(lèi)型嘗試以對(duì)象的方式去使用它的時(shí)候,比如訪問(wèn)length屬性,js會(huì)很智能的把基本類(lèi)型轉(zhuǎn)換為對(duì)應(yīng)的包裝類(lèi)型對(duì)象。相當(dāng)于new了string。當(dāng)完成訪問(wèn)后,這個(gè)臨時(shí)對(duì)象會(huì)被銷(xiāo)毀掉。所以a.t賦值為3后再去輸出a.t值是undefined

JavaScript 類(lèi)型檢測(cè)

類(lèi)型檢測(cè)有以下幾種

  1. typeof
  2. instanceof
  3. Object.prototype.toString
  4. constructor
  5. duck type

最常見(jiàn)的typeof它會(huì)返回一個(gè)字符串,非常適合函數(shù)對(duì)象和基本類(lèi)型的判斷

typeof 100 === “number”
typeof true === “boolean”
typeof function () {} === “function”

typeof(undefined) ) === “undefined”
typeof(new Object() ) === “object”
typeof( [1, 2] ) === “object”
typeof(NaN ) === “number”
typeof(null) === “object”

typeof判斷一些基本類(lèi)型,函數(shù)對(duì)象的時(shí)候非常方便。但是對(duì)于其他對(duì)象的類(lèi)型判斷就會(huì)沒(méi)有辦法了。比如說(shuō)想判斷一個(gè)對(duì)象是不是數(shù)組,如果用typeof會(huì)返回object顯然不是我想要的。

對(duì)于判斷對(duì)象類(lèi)型的話,常用obj instanceof Object

[1, 2] instanceof Array === true
new Object() instanceof Array === false

function person(){};
function student(){};
student.prototype=new person();
var bosn =new student();
console.log(bosn instanceof student)//true
var one =new person();
console.log(one instanceof person)//true
console.log(bosn instanceof person)//true

Object.prototype.toString

IE6/7/8 Object.prototype.toString.apply(null) 返回”[object Object]”

Object.prototype.toString.apply([]); === “[object Array]”;
Object.prototype.toString.apply(function(){}); === “[object Function]”;
Object.prototype.toString.apply(null); === “[object Null]”
Object.prototype.toString.apply(undefined); === “[object Undefined]”

typeof
適合基本類(lèi)型及function檢測(cè),遇到null失效。

[[Class]]
通過(guò){}.toString拿到,適合內(nèi)置對(duì)象和基元類(lèi)型,遇到null和undefined失效(IE678等返回[object Object])。

instanceof
適合自定義對(duì)象,也可以用來(lái)檢測(cè)原生對(duì)象,在不同iframe和window間檢測(cè)時(shí)失效。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI