您可能未使用過(guò)的JavaScript功能
JavaScript具有許多經(jīng)常使用的功能。 但是,有些功能可能我們大多數(shù)人都沒(méi)有使用過(guò)。
在本文中,我們將介紹其中一些功能以及可能的用例。
標(biāo)記模板文字
帶有標(biāo)簽的模板文字是處理模板字符串的函數(shù)。
它們經(jīng)常在React庫(kù)中使用,例如樣式組件庫(kù)。 此功能實(shí)際上很有用。
它使我們可以輕松地解析模板字符串文字。 它使我們可以使用函數(shù)來(lái)解析模板文字。
例如,我們可以按以下方式使用它:
- const tag = (strings, ...vals) => { console.log(strings); console.log(vals);}const name = 'foo';tag `Hi ${name}`;
在上面的代碼中,我們有he標(biāo)記函數(shù)和vals數(shù)組,該函數(shù)具有包含字符串的各個(gè)部分的字符串函數(shù),該函數(shù)具有插值到字符串中的值。
在上面的示例中,我們有一個(gè)數(shù)組,其中'Hi'和''作為string的值。
在vals數(shù)組中,我們有'foo'。
我們可以使用它來(lái)返回要返回的對(duì)象。 例如,我們可以如下重寫(xiě)標(biāo)記函數(shù):
- const tag = (strings, ...vals) => { return `${strings[0]}! ${vals[0]}`}
在上面的代碼中,我們從string和vals中獲取字符串的各個(gè)部分,并放入!。 在兩個(gè)表達(dá)式之間。
然后我們得到嗨! 返回值的foo。
逗號(hào)運(yùn)算符
逗號(hào)運(yùn)算符始終返回由逗號(hào)運(yùn)算符分隔的項(xiàng)目列表中的最后一項(xiàng)。
例如,我們可以按以下方式使用它:
- const foo = (1, 2, 3);
然后我們得到3。
它可以使用任何表達(dá)式,并且始終返回最后一個(gè)求值的表達(dá)式。
With
with運(yùn)算符絕對(duì)是我們不應(yīng)該使用的運(yùn)算符。 在嚴(yán)格模式下禁止使用。
該運(yùn)算符在語(yǔ)言中增加了一些性能和安全性問(wèn)題。 它用于擴(kuò)展語(yǔ)句的作用域鏈。
它的用法如下:
- with(expression) statement
要么:
- with(expression) { statement statement ...}
在上面的代碼中,我們圍繞expression創(chuàng)建了一個(gè)新范圍。
塊中的所有語(yǔ)句都將表達(dá)式作為父范圍。
例如,我們可以按以下方式使用它:
- const obj = { a: 1, b: 2, c: 3}
- with(obj) {
- console.log(a, b, c);
- }
在上面的代碼中,with塊內(nèi)的表達(dá)式都將相對(duì)于obj對(duì)象進(jìn)行范圍限定。
因此,a,b和c實(shí)際上是obj.a,obj.b和obj.c。
與with一樣,塊范圍變量在with塊之外不可用。
例如,如果我們有:
- const obj = { a: 1, b: 2, c: 3}
- with(obj) {
- console.log(a, b, c);
- let x = 1;
- }
- console.log(x);
如果嘗試在x上調(diào)用console.log,則在with塊之外引用x時(shí),會(huì)出現(xiàn)錯(cuò)誤。
In
in運(yùn)算符對(duì)于檢查屬性是對(duì)象的一部分還是原型鏈中的任何原型非常有用。
如果該屬性在對(duì)象中或原型鏈中的任何屬性中,則返回true,否則返回false。
例如,如果我們具有以下類(lèi)結(jié)構(gòu)和對(duì)象:
- class Foo { constructor() { this.a = 1; }}
- class Bar extends Foo {
- constructor() {
- super();
- this.b = 2;
- this.c = 3; }
- }
- const bar = new Bar();
然后,如果我們記錄以下表達(dá)式的返回值:
- console.log('a' in bar);
- console.log('b' in bar);
- console.log('c' in bar);
我們認(rèn)為所有日志都是正確的。
這是因?yàn)閎ar以Foo實(shí)例作為其原型,并且in運(yùn)算符檢查對(duì)象本身及其原型的屬性。
因此,in bar也是如此。 如果我們只想檢查該屬性是否為非繼承屬性,則必須使用obj.hasOwnProperty方法,其中obj是沒(méi)有null原型的任何JavaScript對(duì)象。
結(jié)論
標(biāo)記的模板文字可用于將模板字符串轉(zhuǎn)換為所需的值。
逗號(hào)運(yùn)算符始終返回逗號(hào)分隔列表中的最后一項(xiàng)。
in運(yùn)算符檢查屬性是否在對(duì)象或其原型中。
是您的JavaScript代碼中不應(yīng)該包含的內(nèi)容。