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