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