摘要:來(lái)自你不知道的對(duì)未初始化和未聲明的變量執(zhí)行操作符都返回了值類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型,這個(gè)特殊的值是。
基本類型
主要有:undefined、null、布爾值(Boolean)、字符串(String)、數(shù)值(Number)、Symbol
undefined
在使用 var,let,const 聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是undefined
注意點(diǎn):
undefined 是一種類型 區(qū)別于 "undefined"
番外:作用域是一套規(guī)則,用于確定在何處以及如何查找變量(標(biāo)識(shí)符)。如果查找的目的是對(duì)變量進(jìn)行賦值,那么就會(huì)使用LHS查詢;如果目的是獲取變量的值,就會(huì)使用RHS查詢。RHS查詢找到了一個(gè)變量,但是你嘗試對(duì)這個(gè)變量的值進(jìn)行不合理的操作,比如試圖對(duì)一個(gè)非函數(shù)類型的值進(jìn)行函數(shù)調(diào)用,或著引用null或undefined類型的值中的屬性,那么引擎會(huì)拋出另外一種類型的異常,叫作TypeError。ReferenceError同作用域判別失敗相關(guān),而TypeError則代表作用域判別成功了,但是對(duì)結(jié)果的操作是非法或不合理的。 來(lái)自--《你不知道的JS》
對(duì)未初始化和未聲明的變量執(zhí)行typeof操作符都返回了undefined值;
null
Null類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型,這個(gè)特殊的值是null。從邏輯角度來(lái)看,null值表示一個(gè)空對(duì)象指針,而這也正是使用typeof操作符檢測(cè)null值時(shí)會(huì)返回"object"的原因
注意點(diǎn) undefined與null的關(guān)系
== 操作符會(huì)進(jìn)行隱式轉(zhuǎn)換 === 不會(huì)
Boolean
注意點(diǎn):
Number
注意點(diǎn)
NAN
NAN 與任何值進(jìn)行運(yùn)算都是NAN
NAN 與任何值都不相等 包括它自己
對(duì)于字符串轉(zhuǎn)換 用parseInt(),parseFloat 轉(zhuǎn)換空字符串會(huì)返回NaN(Number()對(duì)空字符返回 0)
String
幾乎所有值都具有toString() 方法;
Symbol
引用類型Object 、Array基本引用類型
如下~
var str = "hello"; //string 基本類型 var s2 = str.charAt(0); alert(s2); // h
毫無(wú)疑問(wèn)上面的string是一個(gè)基本類型,但是它卻能召喚出一個(gè) charAt() 的方法,這是什么原因呢?
主要是因?yàn)樵诨绢愋椭?,有三個(gè)比較特殊的存在就是:String Number Boolean,這三個(gè)基本類型都有自己對(duì)應(yīng)的包裝對(duì)象。并且隨時(shí)等候召喚。包裝對(duì)象呢,其實(shí)就是對(duì)象,有相應(yīng)的屬性和方法。至于這個(gè)過(guò)程是怎么發(fā)生呢,其實(shí)是在后臺(tái)偷偷發(fā)生的。
//我們平常寫程序的過(guò)程: var str = "hello"; //string 基本類型 var s2 = str.charAt(0); //在執(zhí)行到這一句的時(shí)候 后臺(tái)會(huì)自動(dòng)完成以下動(dòng)作 : ( var _str = new String("hello"); // 1 找到對(duì)應(yīng)的包裝對(duì)象類型,然后通過(guò)包裝對(duì)象創(chuàng)建出一個(gè)和基本類型值相同的對(duì)象 var s2 = _str.chaAt(0); // 2 然后這個(gè)對(duì)象就可以調(diào)用包裝對(duì)象下的方法,并且返回結(jié)給s2. _str = null; // 3 之后這個(gè)臨時(shí)創(chuàng)建的對(duì)象就被銷毀了, str =null; ) alert(s2);//h alert(str);//hello
注意這是一瞬間的動(dòng)作 實(shí)際上我們沒(méi)有改變字符串本身的值。就是做了下面的動(dòng)作.這也是為什么每個(gè)字符串具有的方法并沒(méi)有改變字符串本身的原因。
由此我們可以知道,引用類型和基本包裝對(duì)象的區(qū)別在于:生存期
引用類型所創(chuàng)建的對(duì)象,在執(zhí)行的期間一直在內(nèi)存中,而基本包裝對(duì)象只是存在了一瞬間。
所以我們無(wú)法直接給基本類型添加方法:
var str = "hello"; str.number = 10; //假設(shè)我們想給字符串添加一個(gè)屬性number ,后臺(tái)會(huì)有如下步驟 { var _str = new String("hello"); // 1 找到對(duì)應(yīng)的包裝對(duì)象類型,然后通過(guò)包裝對(duì)象創(chuàng)建出一個(gè)和基本類型值相同的對(duì)象 _str.number = 10; // 2 通過(guò)這個(gè)對(duì)象調(diào)用包裝對(duì)象下的方法 但結(jié)果并沒(méi)有被任何東西保存 _str =null; // 3 這個(gè)對(duì)象又被銷毀 } alert(str.number); //undefined 當(dāng)執(zhí)行到這一句的時(shí)候,因?yàn)榛绢愋捅緛?lái)沒(méi)有屬性,后臺(tái)又會(huì)重新重復(fù)上面的步驟 { var str = new String("hello"); // 1 找到基本包裝對(duì)象,然后又新開(kāi)辟一個(gè)內(nèi)存,創(chuàng)建一個(gè)值為hello對(duì)象 str.number = undefined // 2 因?yàn)榘b對(duì)象下面沒(méi)有number這個(gè)屬性,所以又會(huì)重新添加,因?yàn)闆](méi)有值,所以值是未定義;然后彈出結(jié)果 str =null; // 3 這個(gè)對(duì)象又被銷毀 }
那么我們?cè)趺床拍芙o基本類型添加方法或者屬性呢?
答案是在基本包裝對(duì)象的原型下面添加,每個(gè)對(duì)象都有原型。
//給字符串添加方法 要寫到對(duì)應(yīng)的包裝對(duì)象的原型下才行 var str = "hello"; String.prototype.last= fuction(){ return this.charAt(this.length); }; str.last(); // 5 執(zhí)行到這一句,后臺(tái)依然會(huì)偷偷的干這些事 { var _str = new String("hello");// 找到基本包裝對(duì)象,new一個(gè)和字符串值相同的對(duì)象, _str.last(); // 通過(guò)這個(gè)對(duì)象找到了包裝對(duì)象下的方法并調(diào)用 _str =null; // 這個(gè)對(duì)象被銷毀 }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103857.html
摘要:創(chuàng)建數(shù)組的基本方式有兩種第一種是使用構(gòu)造函數(shù),如下所示第二種是使用數(shù)組字面量表示法,如下所示類型每個(gè)函數(shù)都是類型的實(shí)例,而且都與其他引用類型一樣具有屬性和方法。 js中有六種數(shù)據(jù)類型,包括五種基本數(shù)據(jù)類型(Number,String,Boolean,Undefined,Null),和一種復(fù)雜數(shù)據(jù)類型(Object)。 typeof 操作符由于js中的變量是松散類型的,所以它提供了一種檢...
摘要:的輸出方式瀏覽器彈出警告彈框,它會(huì)阻塞代碼執(zhí)行彈框,它顯示的內(nèi)容會(huì)默認(rèn)轉(zhuǎn)換成字符串顯示例如彈出一個(gè)可輸入的彈框,還有兩個(gè)按鈕確認(rèn)和取消點(diǎn)擊確定,返回在輸入框輸入的內(nèi)容,點(diǎn)擊取消返回空確認(rèn)彈框有兩個(gè)按鈕,確認(rèn)和取消,點(diǎn)擊確認(rèn)返回為點(diǎn)擊取消為, js的輸出方式: 1、alert();瀏覽器彈出警告彈框,它會(huì)阻塞代碼執(zhí)行;alert彈框,它顯示的內(nèi)容會(huì)默認(rèn)轉(zhuǎn)換成字符串顯示; 例如:alert...
摘要:定義運(yùn)算符用來(lái)判斷一個(gè)構(gòu)造函數(shù)的屬性所指向的對(duì)象是否存在另外一個(gè)要檢測(cè)對(duì)象的原型鏈上,用于引用類型。但其實(shí),實(shí)例的來(lái)自于構(gòu)造函數(shù)的。 一、關(guān)于css 樣式優(yōu)先級(jí): 行內(nèi)樣式>id選擇器樣式>類選擇器樣式>標(biāo)簽選擇器樣式>通配符選擇器的樣式>繼承樣式>默認(rèn)樣式 二、關(guān)于js 關(guān)于問(wèn)題:**JavaScript中的所有事物都是對(duì)象??** 從typeof和instanceo...
摘要:所以相對(duì)于簡(jiǎn)單數(shù)據(jù)類型而言,他們占用內(nèi)存比較小,如果放在堆中,查找會(huì)浪費(fèi)很多時(shí)間,而把堆中的數(shù)據(jù)放入棧中也會(huì)影響棧的效率。六總結(jié)本文總結(jié)了數(shù)據(jù)類型及其聲明賦值更新時(shí)在內(nèi)存堆棧中的表現(xiàn),可以更深入的理解這些數(shù)據(jù)類型。 JS數(shù)據(jù)類型 與 內(nèi)存堆棧 一、前言 JS的數(shù)據(jù)類型已經(jīng)是大家都很熟悉的東西了,但是大家是否對(duì)這些數(shù)據(jù)類型在內(nèi)存中的分配了解,甚至在操作這些變量時(shí),內(nèi)存中是如何表現(xiàn)的,本文...
摘要:引用數(shù)據(jù)類型及堆內(nèi)存引用數(shù)據(jù)類型是保存在堆內(nèi)存中的對(duì)象,他的大小是不固定的。基礎(chǔ)數(shù)據(jù)類型在變量對(duì)象里可以直接對(duì)應(yīng)對(duì)應(yīng)的值,而引用數(shù)據(jù)類型是存儲(chǔ)在堆里的,在變量對(duì)象中對(duì)應(yīng)的是堆內(nèi)存的地址。因?yàn)槲覀冃薷谋举|(zhì)上是修改了堆內(nèi)存里的數(shù)據(jù)。 ? ??? ??因?yàn)橐郧扒岸碎_(kāi)發(fā)跟數(shù)據(jù)存儲(chǔ)打交道比較少,javascript又具有自動(dòng)垃圾回收機(jī)制。數(shù)據(jù)結(jié)構(gòu)以及存儲(chǔ)相關(guān)的概念,其實(shí)是很容易被前端er忽略的。...
摘要:對(duì)于與的設(shè)計(jì)在中所設(shè)計(jì)的純對(duì)象類型的與方法,它們的返回如下方法返回值對(duì)象本身。與三個(gè)強(qiáng)制轉(zhuǎn)換函數(shù),所對(duì)應(yīng)的就是在標(biāo)準(zhǔn)中的三個(gè)內(nèi)部運(yùn)算轉(zhuǎn)換的對(duì)照表。 在JS中的運(yùn)算符共同的情況中,(+)符號(hào)是很常見(jiàn)的一種,它有以下的使用情況: 數(shù)字的加法運(yùn)算,二元運(yùn)算 字符串的連接運(yùn)算,二元運(yùn)算,最高優(yōu)先 正號(hào),一元運(yùn)算,可延伸為強(qiáng)制轉(zhuǎn)換其他類型的運(yùn)算元為數(shù)字類型 當(dāng)然,如果考慮多個(gè)符號(hào)一起使用時(shí),...
閱讀 2415·2021-09-08 09:45
閱讀 3363·2021-09-08 09:45
閱讀 3106·2019-08-30 15:54
閱讀 3361·2019-08-26 13:54
閱讀 1417·2019-08-26 13:26
閱讀 1394·2019-08-26 13:23
閱讀 917·2019-08-23 17:57
閱讀 2187·2019-08-23 17:14