摘要:是最特殊的類型,表示沒有意義的數,例如。十六進制數八進制數十進制數十六進制數對于部分情況,和存在分歧。例如,表示希臘字符關于字符串的轉換,其實核心就是函數,如果是數字型,還可以添加參數,使之變為二進制八進制十進制十六進制數。
雖然目前已經算是ES6的時代,然是ES5的尾巴仍在眾多框架中出現,JS我雖然通過視頻等方式學習,曾經做過項目,但是仍對部分細節和原理不了解,通過閱讀這本書,希望能對ES5有更加完整的了解。
為什么我要選擇這個做專題數據類型相信對JS有所了解的人都不陌生,但是具體的細節我還是想做好筆記,方便復查,有時候,這種細節問題出bug你要是不知道是根本無法排除的。另外,面試的時候很可能遇到。
數據類型 簡單數據類型ES5中有5中簡單數據類型,Undefined, Null, Boolean, Number, String.
Undefined類型一種特殊的數據類型,只有一個值undefined。
var message; alert(message==undefined); // true
已經聲明但是沒有初始化的變量默認都是Undefined類型的。但是需要強調的是,Undefined類型的默認是在已經聲明的前提下,未聲明的變量是直接報錯而并非Undefined。
var message; // var news; // news未聲明 alert(message==undefined); // true alert(news==undefined); // 報錯Null類型
Null類型同樣很特殊,只有一種值,那就是null,他更像是一個空指針,所以其typeof會顯示為object類型。另外,當不清楚變量的初始值時,將變量初始為null更加合適,這樣一來,只要直接檢查 null 值就可以知道相應的變量是否已經保存了一個對象的引用。
if (car!=null){ // some possible operation }
還需要注意的是,Null類型和Undefined類型的相等操作符運算返回值為“true”。
Boolean類型布爾型只有兩個值,true和false,他不是簡單的1和0的對應關系,而是真假,但是,簡便地,數據類型的轉換會十分靈活,如下面所示。
數據類型 | 轉換為True | 轉換為False |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | 空字符串 |
Number | 任何非0數值,包括無窮大 | 0和NaN |
Object | 任何對象 | null |
Undefined | n/a | undefined |
Number類型還能細分整數和浮點數值。
// 整數 var intNum=55; // 八進制 var octalNum1=070; var octalNum2=079; var octalNum3=08; // 十六進制 var hexNum1=0xA; var hexNum2=0x1f; // 浮點數 var floatNum1=1.1; var floatNum2=10.; // 會解析為整數 var floatNum3=3.14e10; // 科學計數法
js在計算中存在精度問題的內容我多帶帶寫一篇文章解釋,是解決JS浮點數精度問題。由于精度問題的復雜性,自己變成解決成本太高,有人已經組件化實現了。Big.js
計算機中的數值是存在范圍的,最小值精度表示為Number.MIN_VALUE,值為5e-325,最大值表示為Number.MAX_VALUE,值為1.7976931348623157e+308。超過最大值會被解析為Infinity,小于最小值精度-Infinity。
NaN是最特殊的類型,表示沒有意義的數,例如10/0。而且有下面的特殊規則。
alert(NaN == NaN); //false alert(isNaN(NaN)); //true alert(isNaN(10)); //false( 10 是一個數值) alert(isNaN("10")); //false(可以被轉換成數值 10) alert(isNaN("blue")); //true(不能轉換成數值) alert(isNaN(true)); //false(可以被轉換成數值 1)
數值轉換成其他類型規則和案例如下:
如果是 Boolean 值, true 和 false 將分別被轉換為 1 和 0。
如果是數字值,只是簡單的傳入和返回。
如果是 null 值,返回 0。
如果是 undefined,返回 NaN。
如果是字符串,遵循下列規則:
如果字符串中只包含數字(包括前面帶正號或負號的情況),則將其轉換為十進制數值,即"1"
會變成 1, "123"會變成 123,而"011"會變成 11(注意:前導的零被忽略了);
如果字符串中包含有效的浮點格式,如"1.1",則將其轉換為對應的浮點數值(同樣,也會忽略前導零);
如果字符串中包含有效的十六進制格式,例如"0xf",則將其轉換為相同大小的十進制整數值;
如果字符串是空的(不包含任何字符),則將其轉換為 0;
如果字符串中包含除上述格式之外的字符,則將其轉換為 NaN。
如果是對象,則調用對象的 valueOf()方法,然后依照前面的規則轉換返回的值。如果轉換的結果是 NaN,則調用對象的toString()方法,然后再次依照前面的規則轉換返回的字符串值。
var num1 = Number("Hello world!"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1
由于Number()比較復雜,處理整數的時候parseInt()函數,規則不用多說,直接看例子。
var num1 = parseInt("1234blue"); // 1234 var num2 = parseInt(""); // NaN var num3 = parseInt("0xA"); // 10(十六進制數) var num4 = parseInt(22.5); // 22 var num5 = parseInt("070"); // 56(八進制數) var num6 = parseInt("70"); // 70(十進制數) var num7 = parseInt("0xf"); // 15(十六進制數)
對于部分情況,ES3和ES5存在分歧。
//ECMAScript 3 認為是 56(八進制), ECMAScript 5 認為是 70(十進制) var num = parseInt("070"); alert(num)
為了防止上述問題,這個函數有了雙參數形式。雙參數形式的主要目的其實是規定解析的進制。
var num = parseInt("0xAF", 16); //175 var num1 = parseInt("AF", 16); //175 var num2 = parseInt("AF"); //NaN var num1 = parseInt("10", 2); //2 (按二進制解析) var num2 = parseInt("10", 8); //8 (按八進制解析) var num3 = parseInt("10", 10); //10 (按十進制解析) var num4 = parseInt("10", 16); //16 (按十六進制解析)
類似地,還有parseFloat()函數。下面是詳細的例子。主要是要看清楚其解析機制。
var num1 = parseFloat("1234blue"); //1234 (整數) var num2 = parseFloat("0xA"); //0 var num3 = parseFloat("22.5"); //22.5 var num4 = parseFloat("22.34.5"); //22.34 var num5 = parseFloat("0908.5"); //908.5 var num6 = parseFloat("3.125e7"); //31250000String類型
字符串相信都比較熟悉,此處首先是先強調一點,JS對單雙引號括起來的字符串沒有區別,但是必須匹配。
下面是常見的轉義字符:
轉義字符 | 含 義 |
---|---|
n | 換行 |
t | 制表 |
b | 空格 |
r | 回車 |
f | 進紙 |
斜杠 | |
" | 單引號("),在用單引號表示的字符串中使用。例如: "He said, "hey."" |
" | 雙引號("),在用雙引號表示的字符串中使用。例如: "He said, "hey."" |
xnn | 以十六進制代碼nn表示的一個字符(其中n為0~F)。例如, x41表示"A" |
unnnn | 以十六進制代碼nnnn表示的一個Unicode字符(其中n為0~F)。例如, u03a3表示希臘字符Σ |
關于字符串的轉換,其實核心就是toString()函數,如果是數字型,還可以添加參數,使之變為二進制、八進制、十進制、十六進制數。
var num = 10; alert(num.toString()); // "10" alert(num.toString(2)); // "1010" alert(num.toString(8)); // "12" alert(num.toString(10)); // "10" alert(num.toString(16)); // "a"
而對其他類型,存在一些特殊情況:
var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); // "10" alert(String(value2)); // "true" alert(String(value3)); // "null" alert(String(value4)); // "undefined"Object類型
object同樣屬于一種數據類型,但是屬于復雜數據類型,在這本書里面專門有專題講解,此處先不贅述。
下面是我的個人公眾號,技術方面的內容以及非技術方面內容都會在此展示。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82099.html
摘要:作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。這樣,一直延續到全局執行環境全局執行環境的變量對象始終都是作用域鏈中的最后一個對象。如果在局部環境中沒有找到該變量名,則繼續沿作用域鏈向上搜索。 【JavaScript.ES5】執行環境和作用域 參考文獻: Nicholas C.Zakas 《JavaScript》高級程序設計 僅為個人學習參考文獻的內容記錄的筆記。存...
showImg(http://img3.douban.com/lpic/s8958650.jpg); 0x00 javascript組成 ECMAScript(-265)核心語言部分 DOM文檔對象模型(DOM1、2、3) BOM瀏覽器對象模型(提供與瀏覽器交互的接口和方法) 0x01 async 異步加載 執行順序不定 charset defer 延遲加載,立即下載腳本但不執行 src ...
摘要:高程讀書筆記第六章理解對象創建自定義對象的方式有創建一個實例,然后為它添加屬性和方法。創建了自定義的構造函數之后,其原型對象默認只會取得屬性至于其他方法都是從繼承而來的。 JS高程讀書筆記--第六章 理解對象 創建自定義對象的方式有創建一個Object實例,然后為它添加屬性和方法。還可用創建對象字面量的方式 屬性類型 ECMAScript在定義只有內部采用的特性時,描述了屬性的各種特征...
摘要:在同一個塊內,不允許用重復聲明變量。中為新增了塊級作用域。自帶遍歷器的對象有數組字符串類數組對象對象的對象等和結構對象。返回一個遍歷器,使遍歷數組的鍵值對鍵名鍵值。 目錄 1.語法 2.類型、值和變量 3.表達式和運算符 4.語句 5.數組 6.對象 7.函數 8.全局屬性和方法 9.詞法作用域、作用域鏈、閉包 10.原型鏈、繼承機制 11.this的理解 12.ES5新特性 13.E...
摘要:主要知識點有對象類別屬性速記法方法簡寫需計算屬性名方法方法可允許重復的屬性自有屬性的枚舉順序方法引用方法定義深入理解筆記目錄對象類別普通對象擁有對象所有默認的內部行為。奇異對象其內部行為在某些方面有別于默認行為。所有的標準對象都是內置對象。 主要知識點有對象類別、屬性速記法、方法簡寫、需計算屬性名、Object.is()方法、Object.assign()方法、可允許重復的屬性、自有屬...
閱讀 1707·2023-04-26 02:30
閱讀 1033·2021-11-10 11:36
閱讀 1380·2021-10-08 10:14
閱讀 3496·2021-09-28 09:35
閱讀 1552·2021-08-23 09:47
閱讀 2544·2019-08-30 15:56
閱讀 1469·2019-08-30 15:44
閱讀 1751·2019-08-30 13:59