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