成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

淺談ES6中基本數(shù)據(jù)類(lèi)型的操作方法

longmon / 1635人閱讀

摘要:值得注意的是,中整數(shù)和浮點(diǎn)數(shù)采用的是同樣的儲(chǔ)存方法位雙精度浮點(diǎn)數(shù),所以和被視為同一個(gè)值。

在Javascript中,數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型兩大類(lèi),其中,Array和Function在本質(zhì)上仍然是一種特殊的對(duì)象:

基本類(lèi)型: String / Number / Boolean / Null / Undefined
引用類(lèi)型: Object / Array / Function

ES6中引入了一種新的基本數(shù)據(jù)類(lèi)型Symbol,表示獨(dú)一無(wú)二的值,這里暫不作討論

對(duì)于js中數(shù)據(jù)類(lèi)型的判斷,可以用typeof方法:

typeof ""  // string
typeof 1  // number
typeof false  // boolean
typeof null  // object
typeof undefined  // undefined

typeof {a: 1}  // object
typeof []  // object
typeof function(){}  // function

其中,null作為基本類(lèi)型之一,為什么類(lèi)型返回為object,這里做了一些解答。

另外,也可以使用以下方法作為判斷依據(jù),這里不做贅述。

instanceof   // A instanceof B, 檢測(cè)A是否為B的實(shí)例
toString   // 作為object的原型方法,通過(guò)Object.prototype.toString().call("")返回[object Xxx],可得數(shù)據(jù)類(lèi)型
constructor   // 當(dāng)重寫(xiě)prototype后,原有的constructor引用會(huì)丟失,constructor會(huì)默認(rèn)為object

接下來(lái),對(duì)各種js基本數(shù)據(jù)類(lèi)型對(duì)常用處理方法做一下簡(jiǎn)要對(duì)概述,并重點(diǎn)講一下在ES6中帶來(lái)的新的處理方法。

String

字符串是js中最常見(jiàn)的數(shù)據(jù)類(lèi)型,同樣,我們對(duì)其運(yùn)用到的處理方法也是最多的,以下是ES5中,針對(duì)string的最常用處理方法:

concat( ) / indexOf( ) / replace( ) / slice( ) / split( ) / toUpperCase( ) 

在ES6中,又為字符串增添了一些新的方法和API,首先增加了includes( )等三個(gè)方法,作為對(duì)之前indexOf( )方法對(duì)補(bǔ)充:

includes( ): 返回布爾值,表示字符串中是否含有某個(gè)局部"串兒"

startsWith( ): 返回布爾值,表示參數(shù)字符串是否在原字符串的頭部

endsWith( ): 返回布爾值,表示參數(shù)字符串是否在原字符串的尾部

let str = "need sleep early";
str.includes("d sleep e");   //true
str.startsWith("nee");   //true;
str.endsWith("earl");   //false;

repeat( ): 返回一個(gè)新的字符串,表示將原來(lái)對(duì)字符串重復(fù)n次

"hello".repeat(2) // "hellohello"
"world".repeat(0) // ""

padStart( ): 用參數(shù)從頭部將原字符串補(bǔ)全至指定長(zhǎng)度

padEnd( ): 用參數(shù)從尾部將原字符串補(bǔ)全至指定長(zhǎng)度

let str = "E"
str.padStart(5, "abc")   //"abcaE"
str.padStart(5, "abcdefg")   //"abcdE"
str.padEnd(5, "abc")   //"Eabca"
str.padEnd(5, "abcdefg")   //"Eabcd"

for...of: 字符串的遍歷器接口,控制獲取單個(gè)字符

for (let singleChar of "Chunhui") {
  console.log(singleChar)
}
// "C"
// "h"
// "u"
// "n"
// "h"
// "u"
// "i"

遍歷字符串接口可以代替?zhèn)鹘y(tǒng)的split( ) + forEach( )的方式,除此之外,ES6中的遍歷器還可以識(shí)別大于0xFFFF的碼點(diǎn),這是傳統(tǒng)的for循環(huán)做不到的。另外,ES6中還給字符串帶來(lái)了一些其他的處理方法,詳情可以去阮一峰的ECMAScript6入門(mén)中索引。

Number

眾所周知,相比較于Java,javascript中number類(lèi)型的使用要方便許多,沒(méi)有int,long,float,double等類(lèi)型,根據(jù)IEEE 754標(biāo)準(zhǔn),js數(shù)字始終以64位雙精度浮點(diǎn)數(shù)來(lái)存儲(chǔ),其中:

值(Fraction/Mantissa) 指數(shù) 符號(hào)
52 bits(0 - 51) 1 bit (63) 11 bits (52 - 62)

正是因?yàn)?4位浮點(diǎn)數(shù)的精度不足的問(wèn)題,導(dǎo)致number類(lèi)型經(jīng)常會(huì)出現(xiàn)一些匪夷所思的計(jì)算問(wèn)題,如

console.log(0.2 + 0.1)   // 輸出0.30000000000000004
console.log(0.4 + 0.1)   // 輸出0.5
console.log(0.7 + 0.1)   // 輸出0.7999999999999999

關(guān)于number類(lèi)型的精度問(wèn)題,下次會(huì)專(zhuān)門(mén)寫(xiě)一篇文章進(jìn)行分析,這次先講一下在ES5中,number類(lèi)型的一些常用的處理方法:

toString( ) / toFixed( ) / toPrecision( ) / parseInt( ) / parseFloat( )

在ES6中,對(duì)number類(lèi)型的處理方法做了擴(kuò)展,提供了一些新的方法:

Number.isFinite( ): 檢測(cè)數(shù)字是否為有限的(非Infinity)

Number.isNaN( ): 用來(lái)檢查一個(gè)值是否為NaN

Number.isFinite(10); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isNaN(15) // false
Number.isNaN("15") // false
Number.isNaN(NaN) // true

它們與傳統(tǒng)的全局方法isFinite()和isNaN()的區(qū)別在于,傳統(tǒng)方法先調(diào)用Number()將非數(shù)值的值轉(zhuǎn)為數(shù)值,再進(jìn)行判斷,而這兩個(gè)新方法只對(duì)數(shù)值有效,Number.isFinite()對(duì)于非數(shù)值一律返回false, Number.isNaN()只有對(duì)于NaN才返回true,非NaN一律返回false。ES6將上面的ES5中的這幾個(gè)全局方法,移植到Number對(duì)象上面,是為了逐步減少全局性方法,使得語(yǔ)言逐步模塊化。

ES6中提供了Number.isInteger()用來(lái)判斷一個(gè)數(shù)值是否為整數(shù)。值得注意的是,JavaScript 中整數(shù)和浮點(diǎn)數(shù)采用的是同樣的儲(chǔ)存方法(64位雙精度浮點(diǎn)數(shù)),所以15和15.0被視為同一個(gè)值。

Number.isInteger(15)   // true
Number.isInteger(15.0)   // true
Number.isInteger(15.1)   // false
Number.isInteger("15")   // false

除此之外,ES6還對(duì)與number關(guān)系密切的Math( )作了很大的擴(kuò)展,添加了17個(gè)新的方法,這里不贅述。

Boolean

布爾值作為一種比較簡(jiǎn)單的基本數(shù)據(jù)類(lèi)型,在ES5中就僅有幾種簡(jiǎn)單的方法,通過(guò)引用構(gòu)造函數(shù),很清楚的就能知道一些常見(jiàn)值的布爾值:

Boolean(1)   // true
Boolean(0)   // false
Boolean(false)   // false
Boolean("false")   // true
Boolean(null)   // false
Boolean(undefined)   // false
Boolean(NaN)   // false

此外,還有一些簡(jiǎn)單的常用方法:

toString( ) / toSource( ) / valueOf( )
Null / Undefined

把null和undefined放在一起講是因?yàn)檫@兩種數(shù)據(jù)類(lèi)型在js都是很特殊的,并且它們表達(dá)的意義很相近,初學(xué)者經(jīng)常會(huì)混淆這二者。null的意思是"nothing",它被看做不存在的事物,理論上講,null應(yīng)該是一種多帶帶的數(shù)據(jù)類(lèi)型,但是我們?cè)谇懊嬷v過(guò),typeof null的結(jié)果是object,這不得不說(shuō)是一件令人困惑的事情。

對(duì)于undefined,它表示的意思是"未定義的",它與null雖然類(lèi)型不同(type undefined 為undefined),但是二者的值卻是相同的。

typeof null   // object
typeof undefined    // undefined
null == undefined   //true
null === undefined   // false

暫時(shí)就寫(xiě)到這里,下次有時(shí)間來(lái)聊聊ES6中object新增的處理方法。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105160.html

相關(guān)文章

  • 2018 淺談前端面試那些事

    摘要:聲明的變量不得改變值,這意味著,一旦聲明變量,就必須立即初始化,不能留到以后賦值。 雖然今年沒(méi)有換工作的打算 但為了跟上時(shí)代的腳步 還是忍不住整理了一份最新前端知識(shí)點(diǎn) 知識(shí)點(diǎn)匯總 1.HTML HTML5新特性,語(yǔ)義化瀏覽器的標(biāo)準(zhǔn)模式和怪異模式xhtml和html的區(qū)別使用data-的好處meta標(biāo)簽canvasHTML廢棄的標(biāo)簽IE6 bug,和一些定位寫(xiě)法css js放置位置和原因...

    LiuRhoRamen 評(píng)論0 收藏0
  • 2018 淺談前端面試那些事

    摘要:聲明的變量不得改變值,這意味著,一旦聲明變量,就必須立即初始化,不能留到以后賦值。 雖然今年沒(méi)有換工作的打算 但為了跟上時(shí)代的腳步 還是忍不住整理了一份最新前端知識(shí)點(diǎn) 知識(shí)點(diǎn)匯總 1.HTML HTML5新特性,語(yǔ)義化瀏覽器的標(biāo)準(zhǔn)模式和怪異模式xhtml和html的區(qū)別使用data-的好處meta標(biāo)簽canvasHTML廢棄的標(biāo)簽IE6 bug,和一些定位寫(xiě)法css js放置位置和原因...

    stormgens 評(píng)論0 收藏0
  • 2018 淺談前端面試那些事

    摘要:聲明的變量不得改變值,這意味著,一旦聲明變量,就必須立即初始化,不能留到以后賦值。 雖然今年沒(méi)有換工作的打算 但為了跟上時(shí)代的腳步 還是忍不住整理了一份最新前端知識(shí)點(diǎn) 知識(shí)點(diǎn)匯總 1.HTML HTML5新特性,語(yǔ)義化瀏覽器的標(biāo)準(zhǔn)模式和怪異模式xhtml和html的區(qū)別使用data-的好處meta標(biāo)簽canvasHTML廢棄的標(biāo)簽IE6 bug,和一些定位寫(xiě)法css js放置位置和原因...

    Hujiawei 評(píng)論0 收藏0
  • 淺談javascript基本類(lèi)型和引用類(lèi)型

    摘要:在中,變量可以存在兩種類(lèi)型的值,即原始值和引用值。中總共定義了六種數(shù)據(jù)類(lèi)型,分別是對(duì)象,其中前五種叫做基本數(shù)據(jù)類(lèi)型,最后一種叫做引用數(shù)據(jù)類(lèi)型。 在ECMAScript 中,變量可以存在兩種類(lèi)型的值,即原始值和引用值。ES5中總共定義了六種數(shù)據(jù)類(lèi)型,分別是undefined、null、Boolean、String、Number、對(duì)象(Object),其中前五種叫做基本數(shù)據(jù)類(lèi)型,最后一種叫...

    RobinTang 評(píng)論0 收藏0
  • 淺談JavaScript淺拷貝與深拷貝

    摘要:引用數(shù)據(jù)類(lèi)型是存放在堆內(nèi)存中的,變量實(shí)際上是一個(gè)存放在棧內(nèi)存的指針,這個(gè)指針指向堆內(nèi)存中的地址。棧和堆的區(qū)別其實(shí)淺拷貝和深拷貝的主要區(qū)別就是數(shù)據(jù)在內(nèi)存中的存儲(chǔ)類(lèi)型不同。這里,對(duì)存在子對(duì)象的對(duì)象進(jìn)行拷貝的時(shí)候,就是深拷貝了。 數(shù)據(jù)類(lèi)型 在開(kāi)始拷貝之前,我們從JavaScript的數(shù)據(jù)類(lèi)型和內(nèi)存存放地址講起。數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型 和引用數(shù)據(jù)類(lèi)型 基本數(shù)據(jù)類(lèi)型主要包括undefin...

    娣辯孩 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<