亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

es6中容易忽視的細(xì)節(jié)(二)

RayKr / 756人閱讀

摘要:變量的解構(gòu)賦值結(jié)構(gòu)賦值允許使用默認(rèn)值內(nèi)部使用嚴(yán)格相等運(yùn)算符,判斷一個(gè)位置是否有值。所以,只有當(dāng)一個(gè)數(shù)組成員嚴(yán)格等于,默認(rèn)值才會(huì)生效。這樣的層層判斷非常麻煩,因此現(xiàn)在有一個(gè)提案,引入了傳導(dǎo)運(yùn)算符,簡(jiǎn)化上面的寫(xiě)法。

變量的解構(gòu)賦值

結(jié)構(gòu)賦值允許使用默認(rèn)值

let [foo = true] = [];
foo // true

ES6 內(nèi)部使用嚴(yán)格相等運(yùn)算符(===),判斷一個(gè)位置是否有值。所以,只有當(dāng)一個(gè)數(shù)組成員嚴(yán)格等于undefined,默認(rèn)值才會(huì)生效。

let [x = 1] = [undefined];
x//1;
let [x=1] = [null];
x//null ; 

對(duì)象的結(jié)構(gòu)和數(shù)據(jù)的結(jié)構(gòu)類(lèi)似,但數(shù)組的結(jié)構(gòu)是根據(jù)順序決定的,對(duì)象的結(jié)構(gòu)是根據(jù)未知決定的,變量名與鍵值對(duì)應(yīng)才能取到值

let { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
let obj = { first: "hello", last: "world" };
let { first: f, last: l } = obj;
f // "hello"
l // "world"

字符串也可以結(jié)構(gòu)賦值

const [a, b, c, d, e] = "hello";
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

字符串和數(shù)組的結(jié)構(gòu)還有一個(gè)屬性

let {length:yx}=[1,2,3,,4,,5,]
yx // 7

結(jié)構(gòu)賦值的用途
第一個(gè)用途交換變量的值

在es5中我們需要用一個(gè)中間變量來(lái)轉(zhuǎn)換交換變量的值,但是在es6中不需要
var x=4,y=5,c;
c=x;x=y;y=c;
在es6中我們直接可以用結(jié)構(gòu)的方式直接交換
[x,y]=[y,x]

第二個(gè)用途是給函數(shù)設(shè)置默認(rèn)值

jQuery.ajax = function (url, {
  async = true,
  beforeSend = function () {},
  cache = true,
  complete = function () {},
  crossDomain = false,
  global = true,
  // ... more config
}) {
  // ... do stuff
};
指定參數(shù)的

第三個(gè)用途輸入模塊的制定的方法

const {set,index} = require("set-index");

es6給字符串提供了遍歷的方法

for(let item of "sdfsdf"){
    console.log(item)
}

字符串方法中可以使用正則的是match、replace、search、split

es5中的正則修飾符g(全局匹配)/i(不區(qū)分大小寫(xiě)匹配)/m(多行匹配),es6中新增的修飾符u用來(lái)正確處理大于uFFFF的 Unicode 字符

/?{2}/.test("??") // false
/?{2}/u.test("??") // true

es6中數(shù)組擴(kuò)展運(yùn)算符的用法

在es5中我們可以這樣求取數(shù)組的最大值
var arr=[1,2,4,5,5]
Math.max.apply(null,arr)
在es6中我們可以直接
Math.max(...arr)    

擴(kuò)展運(yùn)算發(fā)在字符串中也同樣可以使用

var hello = "hello";
console.log(...hello)    //h e l l o

擴(kuò)展運(yùn)算符和Array.from()都可以將類(lèi)數(shù)組(類(lèi)數(shù)組說(shuō)的廣泛一點(diǎn)其實(shí)就含有l(wèi)ength屬性的對(duì)象)的對(duì)象轉(zhuǎn)換為數(shù)組對(duì)象,但其內(nèi)部實(shí)質(zhì)調(diào)用時(shí)遍歷器接口(Symbol.iterator))[https://www.cnblogs.com/toulo...]

對(duì)象屬性的書(shū)寫(xiě):在es5中我們是不允許把對(duì)象的鍵寫(xiě)成變量或者是表達(dá)式,但是在es6中我們可以把對(duì)象的鍵寫(xiě)成表達(dá)式,以及函數(shù)名也可以寫(xiě)成表達(dá)式的形勢(shì)

var a = "index"
var obj = {a:5}
obj    // {a:5}    es5中的寫(xiě)法
let obj = {[a]:5}
obj    // {index:5}    es6中的寫(xiě)法會(huì)得到這樣的結(jié)果
function [a](){}

Object.assign方法實(shí)行的是淺拷貝,而不是深拷貝。也就是說(shuō),如果源對(duì)象某個(gè)屬性的值是對(duì)象,那么目標(biāo)對(duì)象拷貝得到的是這個(gè)對(duì)象的引用(只對(duì)嵌套的對(duì)象實(shí)現(xiàn)淺拷貝,對(duì)于非嵌套的對(duì)象實(shí)行的是深拷貝)。

var obj1={a:1,b:{c:2}}
var obj2=Object.assign({},obj1)
obj1.a++;
obj1.b.c++;
obj2    // {a:1,b:{c:3}}

Object.assign也可以用來(lái)處理數(shù)組,同位置的值進(jìn)行替換,不同位置的源數(shù)組的值添加到目標(biāo)數(shù)組

Object.assign([1,2,4],["sdfs",4,{a:5},4,6])
["sdfs",4,{a:5},4,6]    直接返回這樣的結(jié)果

null運(yùn)算符
編程實(shí)務(wù)中,如果讀取對(duì)象內(nèi)部的某個(gè)屬性,往往需要判斷一下該對(duì)象是否存在。比如,要讀取message.body.user.firstName,安全的寫(xiě)法是寫(xiě)成下面這樣。

const firstName = (message
  && message.body
  && message.body.user
  && message.body.user.firstName) || "default";

這樣的層層判斷非常麻煩,因此現(xiàn)在有一個(gè)提案,引入了“Null 傳導(dǎo)運(yùn)算符”(null propagation operator)?.,簡(jiǎn)化上面的寫(xiě)法。

const firstName = message?.body?.user?.firstName || "default";

擴(kuò)展

// 如果 a 是 null 或 undefined, 返回 undefined
// 否則返回 a.b.c().d
a?.b.c().d

// 如果 a 是 null 或 undefined,下面的語(yǔ)句不產(chǎn)生任何效果
// 否則執(zhí)行 a.b = 42
a?.b = 42

// 如果 a 是 null 或 undefined,下面的語(yǔ)句不產(chǎn)生任何效果
delete a?.b

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

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

相關(guān)文章

  • es6容易忽視細(xì)節(jié)(三)

    摘要:模塊就是對(duì)象,輸入時(shí)必須查找對(duì)象屬性模塊不是對(duì)象,而是通過(guò)命令顯式指定輸出的代碼,再通過(guò)命令輸入。大括號(hào)里面的變量名,必須與被導(dǎo)入模塊對(duì)外接口的名稱(chēng)相同。 proxy代理的坑 var obj = {index:index} var newObj = new Proxy(obj,{ get:(target,key)=>{ console.l...

    Michael_Lin 評(píng)論0 收藏0
  • es6容易忽視細(xì)節(jié)(一)

    摘要:但是對(duì)于復(fù)雜類(lèi)型的數(shù)據(jù)數(shù)組對(duì)象,保存的是一個(gè)指針,真正的數(shù)據(jù)是存儲(chǔ)在堆區(qū),只能保證這個(gè)指針不會(huì)變化,不能保證里面的數(shù)據(jù)不發(fā)生變化的變量聲明方式在中聲明的全局變量是和頂層對(duì)象的屬性對(duì)等的獲取全局對(duì)象的方法 你可能不知道的let與const let var聲明的變量會(huì)發(fā)生變量提升,在var聲明之前調(diào)用該變量會(huì)數(shù)處undefined,但是let聲明的變量不會(huì)發(fā)生提升,在聲明之前調(diào)用就會(huì)...

    baishancloud 評(píng)論0 收藏0
  • Polyfill:Function.prototype.bind四個(gè)階段

    摘要:第二階段被忽略的細(xì)節(jié)函數(shù)的屬性,用于表示函數(shù)的形參。第三階段被忽視的細(xì)節(jié)通過(guò)生成的構(gòu)造函數(shù)。五本文涉及的知識(shí)點(diǎn)的用法的用法除操作符外的構(gòu)造函數(shù)的用法下詭異的命名函數(shù)表達(dá)式技術(shù)六總結(jié)在這之前從來(lái)沒(méi)想過(guò)一個(gè)的會(huì)涉及這么多知識(shí)點(diǎn),感謝給的啟發(fā)。 昨天邊參考es5-shim邊自己實(shí)現(xiàn)Function.prototype.bind,發(fā)現(xiàn)有不少以前忽視了的地方,這里就作為一個(gè)小總結(jié)吧。 一、Fu...

    mudiyouyou 評(píng)論0 收藏0
  • CSS一些小細(xì)節(jié)

    摘要:一排版原理改變盒模型計(jì)算方式取值初始值舉個(gè)例子演示結(jié)果文檔二一些容易被忽視的小細(xì)節(jié)下面代碼,標(biāo)簽的高度是多少解析默認(rèn)情況下是沒(méi)有高度只有寬度。使用場(chǎng)景可以利用的百分比來(lái)做出一些固定寬高比的盒子。另外注意水平垂直居中的實(shí)現(xiàn)方式。 一、CSS排版原理 showImg(https://segmentfault.com/img/remote/1460000015207778?w=1642&h=...

    fxp 評(píng)論0 收藏0
  • koa 實(shí)現(xiàn) react-view 原理

    摘要:今天,其實(shí)講的是在實(shí)現(xiàn)同構(gòu)過(guò)程中看到過(guò),可能非常容易被忽視更小的一個(gè)點(diǎn)。每一個(gè)架構(gòu)的框架都會(huì)涉及到層的展現(xiàn),也不例外。這種說(shuō)法即對(duì)也不對(duì)。總結(jié)其實(shí),實(shí)現(xiàn)非常簡(jiǎn)單,我們也從一些維度看到了設(shè)計(jì)一個(gè)的一般方法。 在之前我們有過(guò)一篇『React 同構(gòu)實(shí)踐與思考』的專(zhuān)欄文章,給讀者實(shí)踐了用 React 怎么實(shí)現(xiàn)同構(gòu)。今天,其實(shí)講的是在實(shí)現(xiàn)同構(gòu)過(guò)程中看到過(guò),可能非常容易被忽視更小的一個(gè)點(diǎn) —— R...

    zxhaaa 評(píng)論0 收藏0

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

0條評(píng)論

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