摘要:特性概述比較新特性更多。之后后分篇描述目前已經(jīng)比較成熟的語法特性例如和。同上,但返回該元素的索引號(hào)。和對象的屬性行為一致。不將參數(shù)強(qiáng)制轉(zhuǎn)行為。判斷是否為在范圍內(nèi)的正整數(shù)。不少層面的特性可以通過進(jìn)行兼容性支持。
原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_api_extension.html
源代碼: https://github.com/RobinQu/Programing-In-JavaScript/blob/master/chapters/Javascript_Core/ECMAScript/es6/es6_api_extension.md
本文需要補(bǔ)充更多例子
本文存在批注,但該網(wǎng)站的Markdown編輯器不支持,所以無法正常展示,請到原文參考。
ES6特性概述ES6比較ES5新特性更多。新加入的特性大致氛圍三類:
擴(kuò)展已有的原生對象API
Object上的新方法
String上的新方法
Math上的新方法
...
全新的數(shù)據(jù)結(jié)構(gòu)
WeakMap
Set
...
語法特性:新表達(dá)式、語法糖等
arrow function
const
let
rest parameters, default parameters
spread call, spread array
class
computed properties
Modules
for-of loop
Array comprehensions
Generator
Iterator
Block-level function
Destructuring
由于新的語法特性非常復(fù)雜,本篇只描述部分ES6中新加入的API。之后后分篇描述目前已經(jīng)比較成熟的語法特性(例如Generator和Iterator)。
String String.fromCodePoint(n1,n2,n3,...)從UTF16代碼轉(zhuǎn)換字符。這里筆者也不太清楚,應(yīng)該和UTF編碼有關(guān)1。
String.prototype.codePointAt從字符串的字符上取CodePoint。
String.prototype.repeat"abc".repeat(2) // "abcabc"String.prototype.startsWith(a,p)2
判斷字符串是否以a開頭;檢索的起始位置p是可選的。
String.prototype.endWith(a,p)3判斷字符串是否以a結(jié)尾;檢索的起始位置p是可選的。
String.prototype.contains(a,p)4判斷字符串是否包含子串a;檢索的起始位置p是可選的。
Array Array.from(arrayLike,map,thisArg)5根據(jù)類數(shù)組對象arrayLike創(chuàng)建數(shù)組;一個(gè)可選的map方法和其上下文對象thisArg。
Array.of(...items)6從給定參數(shù)創(chuàng)建數(shù)組。
Array.prototype.find(cb,thisArg)7尋找通過指定函數(shù)cb測試的第一個(gè)元素。
Array.prototype.findIndex(cb,thisArg)同上,但返回該元素的索引號(hào)。
Array.prototype.fill(v,s,e)8在數(shù)組索引s和e之間添入多個(gè)元素v。
Object Object.getOwnPropertyDescriptors(o,p)9獲取對象o上屬性p的特性描述對象。在搜尋屬性時(shí),不在原型鏈上搜索。
Object.getPropertyDescriptor(o,p)10獲取對象o上屬性p的特性描述對象。
Object.getOwnPropertyNames(o)獲取對象自身上可枚舉和不可枚舉的鍵名數(shù)組。注意,該方法會(huì)返回那些enumerable屬性已經(jīng)設(shè)置為false的propety。
Object.is(a, b)11檢測兩個(gè)給定對象的值是否相同。該方法不會(huì)進(jìn)行如同==操作符那樣去進(jìn)行數(shù)值轉(zhuǎn)換。與===也有細(xì)微差別。僅當(dāng)符合下面任意條件才返回true:
都是undefined
都是null
都是true或false
都是等長、內(nèi)容相同的字符串
都是同一個(gè)對象
都是number,并且滿足以下任一條件:
都是+0
都是-0
都是NaN
都是非零、非NaN,并且數(shù)值一樣
Object.setPrototypeOf(o, proto)將對象o的原型修改為proto。和對象的__proto__屬性行為一致。修改單個(gè)對象的prototype一般是不被推薦的。
Object.assign(target, source1, source2, ...)類似underscore和lodash的_.extend。將多個(gè)對象的值合并到一個(gè)對象。
Number數(shù)字和算數(shù)的API復(fù)雜而且不常用,但是卻必備。
Number.isFinite(v)判斷數(shù)字是否為有窮。判斷過程不嘗試將參數(shù)轉(zhuǎn)換為number。
Number.isFinite(Infinity); // false Number.isFinite(NaN); // false Number.isFinite(-Infinity); // false Number.isFinite(0); // true Number.isFinite(2e64); // trueNumber.isInteger(v)
判斷是否為正整數(shù)。
Number.isNaN(v)不將參數(shù)強(qiáng)制轉(zhuǎn)行為number。判斷是否確實(shí)為NaN。
Number.isSafeInteger()12判斷是否為在MAX_SAFE_INTEGER范圍內(nèi)的正整數(shù)。這里說明一下,NUMBER.MAX_SAFE_INTEGER是2^53-1。NUMBER.MAX_VALUE是1.7976931348623157 × 10308,這是IEE754中定義的double的最大值[^13]。
Number.EPSILON13一個(gè)常量,代表正整數(shù)1與大于1的最小值之差。大約為: 2.2204460492503130808472633361816 x 10?^16。
Math Math.clz32(v)CountLeadingZeroes32。計(jì)算一個(gè)數(shù)字在32位無符號(hào)位整形數(shù)字的二進(jìn)制形式開頭有多少個(gè)0。
Math.imul(v)以32位正數(shù)的乘法方式來計(jì)算給定參數(shù)。該方法的一種可能的Javascript實(shí)現(xiàn):
function imul(a, b) { var ah = (a >>> 16) & 0xffff; var al = a & 0xffff; var bh = (b >>> 16) & 0xffff; var bl = b & 0xffff; // the shift by 0 fixes the sign on the high part // the final |0 converts the unsigned value into a signed value return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0); }Math.sign(v)
判斷一個(gè)數(shù)的符號(hào)位
Math.sign(3) // 1 Math.sign(-3) // -1 Math.sign("-3") // -1 Math.sign(0) // 0 Math.sign(-0) // -0 Math.sign(NaN) // NaN Math.sign("foo") // NaN Math.sign() // NaNMath.log10(x)
lg(x)
Math.log2(x)log2(x)
Math.log1p(x)ln(1+x)
Math.expm1(x)e^x-1
Math.cosh(x) Math.sinh(x) Math.tanh(x) Math.acosh(x) Math.asinh(x) Math.atanh(x) Math.hypot(v1,v2,v3....)計(jì)算給定參數(shù)的平方平均數(shù)
Math.trunc(v)function trunc(x) { return x < 0 ? Math.ceil(x) : Math.floor(x); }Math.fround(v)
返回?cái)?shù)值的最接近的單精度浮點(diǎn)。
Math.cbrt(x)求x的立方根
關(guān)于ES及其他ES標(biāo)準(zhǔn)13在快速發(fā)展之中,部分討論14都已經(jīng)擴(kuò)展到ES8的規(guī)劃之內(nèi)。就像W3C的新版標(biāo)準(zhǔn)一樣,他們的出現(xiàn)往往被開發(fā)者輕視。前段開發(fā)者以兼容性、實(shí)用性為借口選擇性忽略,但是不知不覺中,這些開發(fā)者已經(jīng)成為了守舊者,那些曾經(jīng)被視為華而不實(shí)的Canvas、ApplicationStorage、Websocket等技術(shù),如今已是大量在線應(yīng)用的基礎(chǔ)設(shè)施。
ES6標(biāo)準(zhǔn)中部分已經(jīng)被廣泛應(yīng)用到node應(yīng)用的開發(fā)之中,也許不久的未來,nodejs的開發(fā)者所寫的Javascript已經(jīng)和瀏覽器端開發(fā)者使用的Javascript是兩種不同的語言了。
ES6不少API層面的特性可以通過shim15進(jìn)行兼容性支持。部分語法特性,通過二次編譯16,可以支持。所以,已經(jīng)不是找理由不了解ECMAScript的時(shí)候了。
http://stackoverflow.com/questions/3744721/javascript-strings-outside-of-the-bmp??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/contains??
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.2.1??
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.2.1??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find??
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-22.1.3.6??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor??
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is??
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.issafeinteger??
http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts
? ?
http://esdiscuss.org/topic/es6-es7-es8-and-beyond-a-proposed-roadmap??
https://github.com/paulmillr/es6-shim/??
https://github.com/addyosmani/es6-tools??
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78137.html
摘要:前三個(gè)是為了解決變量聲明定義的問題,而最后一個(gè)則影響最大。下文只介紹前三個(gè)特性。這是因?yàn)榈牡牟恢С謮K級(jí)作用域,變量僅僅被限制到函數(shù)作用域內(nèi)。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代碼: https://github.com/RobinQu/P...
摘要:前三個(gè)是為了解決變量聲明定義的問題,而最后一個(gè)則影響最大。下文只介紹前三個(gè)特性。這是因?yàn)榈牡牟恢С謮K級(jí)作用域,變量僅僅被限制到函數(shù)作用域內(nèi)。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代碼: https://github.com/RobinQu/P...
摘要:前三個(gè)是為了解決變量聲明定義的問題,而最后一個(gè)則影響最大。下文只介紹前三個(gè)特性。這是因?yàn)榈牡牟恢С謮K級(jí)作用域,變量僅僅被限制到函數(shù)作用域內(nèi)。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代碼: https://github.com/RobinQu/P...
摘要:引入的數(shù)據(jù)結(jié)構(gòu)新加入的數(shù)據(jù)類型有這些數(shù)據(jù)結(jié)構(gòu)的支持并不廣泛,在寫這篇文章的時(shí)候。是或其他可枚舉的對象,其每個(gè)元素是的元數(shù)組。開頭的和不對持有引用,不影響。因此,他們沒有辦法對自身的進(jìn)行直接的枚舉。目前新版的和支持。 原文:http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_data_types.html 源代...
摘要:將轉(zhuǎn)換成常見的使用實(shí)現(xiàn)的基于迭代器的迭代。處停止迭代器基于鴨子模型接口這里使用語法僅僅為了說明問題使用支持為了使用迭代器屬性需要引入。生成器是迭代器的子類,包含了附加的與。 原文地址:http://babeljs.io/docs/learn-...本文基于Luke Hoban精妙的文章《es6features》,請把star獻(xiàn)給他,你可以在此嘗試這些特性REPL。 概述 ECMAScr...
閱讀 1908·2021-11-11 16:55
閱讀 1483·2019-08-30 15:54
閱讀 802·2019-08-29 15:34
閱讀 2290·2019-08-29 13:11
閱讀 2939·2019-08-26 13:28
閱讀 1914·2019-08-26 10:49
閱讀 1022·2019-08-26 10:40
閱讀 2583·2019-08-23 18:21