數據類型 1.Undefined
表示變量已聲明,但未被初始化。需要注意的是當使用typeof操作符判斷數據類型時,未被聲明的變量和未初始化的變量返回的值都為undefined
var message; console.log(typeof message);//undefined console.log(typeof age);//undefined2.null:表示一個空對象指針
使用typeof操作符返回的值是"object",需要注意的是,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true。
console.log(null == undefined);//true3.布爾值:true或false
ECMAScript中所有類型都有與這兩個值等價的值,要將一個值轉換為其對應的布爾
值,可以調用轉型函數Boolean();
Boolean(NaN);//false Boolean(0);//false Boolean("");//false Boolean(null);//false Boolean(undefined)//false4.Number類型
使用IEEE754格式來表示整數和浮點數值。
浮點數值:該數值中必須包含一個小數點,并且小數點后面必須至少有一位數字。浮點數值需要內存空間是保存整數值的兩倍。最高精度是17為小數,但在進行算術運算時其精度遠遠不如整數。
各種數值類型:十進制,八進制(在嚴格模式下無效),十六進制
八進制字面量的第一位必須是0,然后是八進制數字序列(0~7)。如果字面值中的數值超出了范圍,那么前導0將被忽略,后面的數值將被當做十進制數來解析
070//56 079//79
十六進制字面值的前兩位必須是0x,后跟十六進制數字(0~9及A~F)。其中字母A~F可大小也可小寫
0xA//10
在進行算術計算時,所有以八進制和十六進制表示的數值最終都將被轉換為十進制數值
數值范圍:
整數檢測
Number.isInteger(42); // ture Number.isInteger(42.0); // true Number.isInteger(42.3); // false特殊數字
NaN
console.log(NaN === NaN)//false 0/0//NaN
isNaN:接收一個參數,會嘗試將這個值轉換為數值,返回布爾值。只檢查參數是否不是NaN,也不是數字。
console.log(isNaN("10"));//false console.log(isNaN("bb"));//true
無窮數
如果某次計算中的結果中得到了一個超出javascript數值范圍的值,那么這個值將被轉換為特殊的Infinity值,該值無法參與下一次的計算,因為Infinity是無法參與計算的數值。如果這個數是正數則被轉換為Infinity(正無窮),如果這個數是負數則被轉換為-Infinity(負無窮)。
-10/0//-Infinity 10/0//Infinity
var result = Number.MAX_VALUE + Number.MAX_VALUE result // Infinity Infinity/Infinity // NaN
零值
對-0進行字符串化會返回"0";但反過來將字符串轉化為數字結果是準確的。
// 轉字符串 var a = 0 / -3; a.toString() // "0" a + "" // "0" String(a); // "0" // 轉數字 +"-0" // -0 Number(-0); // -0 JSON.parse("-0"); -0
0 === -0 // true
// 區分0和-0 function isNegZero ( n ) { n = Number(n); return (n === 0) && (1/n === -Infinity); } // ES6加入了Object.is();來判斷兩個值是否絕對相等數值轉換
有3個函數可以把非數值轉換為數值。
Number():使用于任何數值類型。
null
Number(null)//0
undefined
Number(undefined)//NaN
布爾值
Number(true)//1
Number(false)//0
字符串
Number("bb")//NaN,非數值字符
Number("123")//123,數值字符
Number("")//0,空串
對象
如果是對象,則檢查該值是否有valueOf()方法,如果有并且返回基本類型值,則使用該值進行強制類型轉化。如果沒有,則調用對象的toString()方法的得到的返回值進行強制類型轉換。
parseInt()/parseFloat():用于將字符串轉換為數值。
parseInt():從第一個字符串開始解析,直到解析到非數字字符,可接受兩個參數,第二個參數代表不同的進制,默認轉換為十進制數。
parseInt("")//NaN,空串 parseInt(22.4)//22 parseInt("12bu")//12 parseInt("10",2)//2 parseInt("10",8)//8
parseFloat():從第一個字符串開始解析,第一個小數點有效,忽略前導0,只能轉換為十進制數值。
parseFloat("")//NaN parseFloat("090")//90 parseFloat("2.3.4")//2.3
二、八、十、十六進制轉換(圖解篇)
5.String類型String類型表示由0或多個16位Unicode字符組成的字符序列,即字符串。ECMAScript中的字符串是不可變的,也就是說,字符串一旦創建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷毀原來的字符串(此過程是在后臺發生的),然后再用另一個包含新值的字符串填充該變量
字符字面量/轉義序列
換行
制表
回車
空格
f 換頁符
斜杠
" 單引號
" 雙引號
xnn
unnn
字符串轉換:
toString():只有null和undefined沒有這個方法。
每個字符串也都有一個toString()方法,該方法返回字符串的一個副本。多數情況下,調用toString()方法不必傳遞參數,但是,在調用數值的toString()方法時,可以傳遞一個參數:輸出數值的基數。這個方法唯一要做的就是返回相應值的字符串表示。
var num = 10; console.log(num.toString());//"10" console.log(num.toString(2));//"1010"
String():適用于所有類型,遵循以下規則
如果值有toString()方法,則調用該方法(沒有參數)并返回相應結果
如果值是null,則返回"null"
如果值是undefined,則返回"undefined"
JSON.stringfy()
6.Object類型ECMAScript中的對象其實就是一組數據和功能的集合。
ECMAScript中Object是所有對象的基礎。
理解:Object類型是所有它的實例的基礎,換句話說,Object類型所具有的任何屬性和方法也同樣存在于更具體的對象中。
-屬性描述符
-屬性定義
-存在性
-枚舉
-遍歷
Object的實例都具有以下屬性和方法
1.Constructor:保存著用于創建當前對象的函數
2.hasOwnProperty(propertyName):用于檢查給定的屬性在當前對象實例中(而不是原型中)是否存在。其中作為參數的屬性名必須以字符串指定
3.isPrototypeOf(object):用于檢查傳入的對象是否是另一個對象的原型
4.toLocalString():返回對象的字符串表示,該字符串與執行環境相對應
5.toString():返回對象的字符串表示
6.valueOf():返回對象的字符串、數字或布爾值表示。通常與toString()方法的返回值相同
只能操作一個值的操作符叫一元操作符。
一元操作符是ECMAScript中最簡單的操作符。
遞增遞減操作符直接借鑒C,而且各有兩個版本:前置型和后置型。顧明思義,前置型應該讓位于要操作的變量之前,而后置型應該位于要操作的變量之后。
前置型
var num1 = 1; var num2 = 2; var num3 = ++num1 + num2;//4
后置型
var num1 = 1; var num2 = 2; var num3 = num1++ + num2;//3
上述兩段代碼得出了不同的結果,原因就在與,后置遞增遞減與前置遞增遞減有一個非常重要的區別,即后置遞增遞減操作是先返回變量的當前值,再將變量的值加1。
2.一元加和減操作符一元加和減操作符主要用于基本的算術運算,也可以用于轉換數據類型
布爾操作符布爾操作符一共有三個:非(NOT)、與(AND)、或(OR)。
1.邏輯非2.邏輯與邏輯非操作符由一個嘆號表示(!),可以應用于ECMAScript中的任何值。無論這個值是什么數據類型,這個操作符都會返回一個布爾值。
同時使用兩個邏輯非操作符,實際上就會模擬Boolean()轉型函數的行為
邏輯與操作符由兩個和號(&&)表示,有兩個操作數且可運用于任何類型的操作數。邏輯與屬于短路操作,即如果第一個操作數求值結果是false,那么就不會對第二個操作數求值。
當兩個值都為真值時,結果為true。當兩個值為一真一假時,結果為false。當兩個值都為假值時,返回false。
其中一個值不是布爾值時:遵循下列規則
第一個操作數為假,返回第一個 第一個操作數為真的時候,返回第二個。
如果第一個操作數是對象,則返回第二個操作數
var a = {b:1};
a && "ss"http://"ss"
如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象
"ss" && a//Object {b: 1}
如果兩個操作數都是對象,則返回第二操作數
var c = {d:2};
c && a//Object {b: 1}
如果有一個操作數是null,則返回null
如果有一個操作數是NaN,則返回NaN
如果有一個操作數是undefined,則返回undefinded
3.邏輯或與邏輯與操作符相似,邏輯或操作符也是短路操作符。也就是說,如果第一個操作數的求值結果為true,就不會對第二個操作數求值了。
第一個操作數為真,返回第一個 第一個操作數為假,返回第二個乘性操作符
ECMAScript定義了3個乘性操作符:乘法、除法和模
Infinity*0//NaN 0/0//NaN Infinity/Infinity//NaN加性操作符 1.加法(轉字符串)
兩個操作符都是數值
執行常規的加法計算。
Infinity + -Infinity//NaN
如果有一個操作數是字符串
如果兩個操作符都是字符串,則將第二個操作符與第一個操作符拼接起來
如果只有一個操作符是字符串,則將另一個操作數轉換為字符串,然后再將兩個字符串拼接起來。
如果這個操作數是對象、數值或布爾值,則調用它們的toString()方法取得相應的字符串值,然后再應用前面關于字符串的規則。對于null和undefined,則分別調用String()函數并取得字符串"undefined"和"null"。
2 + "" //"2"2.減法(轉數值)
如果兩個操作數都是數值
執行常規的算術減發操作并返回結果,如果有一個操作數是NaN,則結果是NaN
Infinity - Infinity//NaN
如果有一個操作數不是數值
如果有一個操作數是字符串、布爾值、null或undefined,則先在后臺調用Number()函數將其轉換為數值,然后再根據前面的規則執行減法計算。如果轉化的結果是NaN,則減法的結果就是NaN。
如果有一個操作數是對象,則調用對象的valueOf()方法以取得表示該對象的數值。如果得到的值是NaN,則減法的結果是NaN。如果對象沒有valueOf()方法則調用其toString()方法并將得到的字符串轉換為數值。
5 - true//4
關系操作符如果兩個操作數都是數值,則執行數值比較
如果兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值
如果一個操作數是數值,則將另一個操作數轉換為數值,然后執行數值比較
var result = "23" < "3"http://true
var result = "23" < 3//false
先轉換再比較
如果有一個操作數是布爾值,則在比較相等性之前,先將其轉換為數值
如果有一個操作數是字符串,另一個操作數是數值,先將其轉換為數值
如果有一個操作數是對象,另一個不是,則調用對象的valueOf()方法,用得到的基本類型值按前面的基本規則進行比較
null和undefined是相等的
要比較相等性之前不能將null和undefined轉換為任何其他值
如果兩個操作數都是NaN,相等操作符也返回false,按規則,NaN不等于NaN
2.全等和不全等僅比較而不轉換
"55" !== 55 //true條件操作符
variable = boolean_expression ? true_value : false_value
本質上,這段代碼的含義就是基于對boolean_expression求值的結果,決定給變量variable賦什么值。如果求值結果為true,則給變量賦true_value;如果求值結果為false,則給變量variable賦false_value值。
賦值操作符簡單的賦值操作符由等號表示,其作用就是把右側的值賦給左側的變量。
逗號操作符逗號操作符多用于聲明多個變量;但除此之外,逗號操作符還用來賦值。在用于賦值時,逗號操作符總會返回表達式中的最后一項。
var num = (5,2,0); num//0;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86132.html
摘要:中變量可能包含兩種不同的數據類型的值基本類型和引用類型。本文主要介紹基本數據類型及其特點。操作符在介紹基本類型值之前,先說下操作符,操作符會返回數據類型的字符串表示。所有未初始化的變量均會保存該值。 前言JavaScript中的變量為松散類型,所謂松散類型就是指當一個變量被申明出來就可以保存任意類型的值,就是不像SQL一樣申明某個鍵值為int就只能保存整型數值,申明varchar只能保...
摘要:以和為例,說明中的數字數據如何轉換為二進制數據。對象用來表示通用的固定長度的原始二進制數據緩沖區。中的數字數據如何轉換為二進制數據對和有了一個大概的了解,下面讓我們來看下它是如何進行二進制數據操作的。 概述 本文主要通過對JavaScript中數字數據與二進制數據之間的轉換,讓讀者能夠了解在JavaScript中如何對數字類型(包括但不限于Number類型)進行處理。 二進制數據在日常...
摘要:在編程語言中,能夠表示并操作的值的類型稱做數據類型。中的原始類型包括數字,字符串和布爾值。日期與時間語言核心包括構造函數,用來創建表示日期和時間的對象。其規則為如果是布爾值,和分別被轉換為和如果是數字值,返回本身。 源代碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/Javas...
摘要:字符串類型的字符串類型用于表示文本數據。例如,使用一個分隔符,一個可以模仿一個列表一個的數組可能更適合一些。不幸的是,當一個分隔符在用于列表中的元素時,打亂了這個列表。屬性的值可以是任意類型,包括具有復雜數據結構的對象。 編程語言都具有內建的數據結構,但各種編程語言的數據結構常有不同之處。本文試圖列出 JavaScript 語言中內建的數據結構及其屬性,它們可以用來構建其他的數據結構;...
摘要:一棧數據結構與不同,中并沒有嚴格意義上區分棧內存與堆內存。引用數據類型的值是保存在堆內存中的對象。不允許直接訪問堆內存中的位置,因此我們不能直接操作對象的堆內存空間。為了更好的搞懂變量對象與堆內存,我們可以結合以下例子與圖解進行理解。 showImg(https://segmentfault.com/img/remote/1460000009784102?w=1240&h=683); ...
摘要:解釋一行,執行一行這也意味著你可以使用同一個變量保存不同類型的數據二數據類型最新的標準定義了種數據類型種原型數據類型布爾值,和一個表明值的特殊關鍵字。我們稱這些類型的值為原始值四布爾值布爾值數據類型只能有兩個值,它們是文本和。 一、動態類型 JavaScript 是一種弱類型或者說動態語言。這意味著你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。(解釋一行,執行一行)這也...
閱讀 1540·2023-04-26 02:08
閱讀 3133·2021-10-14 09:42
閱讀 7210·2021-09-22 15:34
閱讀 3242·2019-08-30 13:16
閱讀 2732·2019-08-26 13:49
閱讀 1349·2019-08-26 11:59
閱讀 1276·2019-08-26 10:31
閱讀 2174·2019-08-23 17:19