js ES6 中感嘆號 和三個點

2022-08-11 21:48:13 字數 2739 閱讀 8392

乙個感嘆號(!)最好理解,也是我們經常使用的。!可以將變數轉為boolean值,所有的truthy和falsy都可以被轉化,比如null、undefined、數字0和空字串取反都為true,其餘都為false。

!null = true

!undefined = true

!"" = true

!0 = true

!100 = false

!"asdss" = false

注意:truthy和falsy不是true和false

兩個感嘆號(!!),學習時比較少見到,通常用來判斷變數是不是truthy或者falsy,這麼說好像和前面一樣?不,乙個感嘆號只是單個判斷比如只對null或者只對undefined,使用兩個!!可以對所有truthy和falsy判斷,比如:

let a; // null、undefined、''、0

if (a !== null && typeof(a) !== "undefined" &&

a !== undefined && a !== '' && a !== 0)

let a;

if(!!a)

這兩種方法的功能一樣,但是明顯下面一種更加簡潔。

備註:好像還有三個!!!的,但是並沒有什麼用處。似乎是將1和2都做了一遍,然後回到原點。

3個點(…)是js擴充套件運算子(spread),用於傳參時可以看作是rest引數的逆運算,將乙個陣列轉為用逗號分隔的引數陣列,就是說將引數陣列展開了傳入函式中。

let a = [1,2,3]

function f(x1,x2,x3)

f(...a) // 等價於 f(1,2,3)

(備註:)rest引數和arguments物件的區別:

rest引數只包括那些沒有給出名稱的引數,arguments包含所有引數

arguments 物件不是真正的陣列,而rest 引數是陣列例項,可以直接應用sort, map, foreach, pop等方法

arguments 物件擁有一些自己額外的功能

當用於函式形參時,後面就不能有其他引數,如下將會報錯

function func(a, ...b, c)

// rest parameter must be last formal parameter

將乙個陣列轉為用逗號分隔的引數序列。

例子1:該運算子主要用於函式呼叫。

functionadd(x, y)

varnumbers = [4, 38];

add(...numbers)// 42

// es5 的寫法

null, [14, 3, 77])

// es6 的寫法

math.max(...[14, 3, 77])

// 等同於

math.max(14, 3, 77);

例子3:通過push函式,將乙個陣列新增到另乙個陣列的尾部

// es5的 寫法

vararr1 = [0, 1, 2];

vararr2 = [3, 4, 5];

// es6 的寫法

vararr1 = [0, 1, 2];

vararr2 = [3, 4, 5];

arr1.push(...arr2);

例子4:合併陣列

// es5

[1, 2].concat(more)

// es6

[1, 2, ...more]

vararr1 = ['a','b'];

vararr2 = ['c'];

vararr3 = ['d','e'];

// es5的合併陣列

arr1.concat(arr2, arr3);

// [ 'a', 'b', 'c', 'd', 'e' ]

// es6的合併陣列

[...arr1, ...arr2, ...arr3]

// [ 'a', 'b', 'c', 'd', 'e' ]

例子5:擴充套件運算子將字串轉為真正的陣列

[...'hello']

js ES6 中感嘆號和三個點擴充套件運算子

乙個感嘆號 最好理解,也是我們經常使用的。可以將變數轉為boolean值,所有的truthy和falsy都可以被轉化,比如null undefined 數字0和空字串取反都為true,其餘都為false。null true undefined true true 0 true 100 false a...

js 乙個兩個三個感嘆號區別

今天看到乙個前輩使用了三個感嘆號來判斷值,就查了一下,綜合了幾篇文章的觀點 1 乙個感嘆號 可將變數轉換成boolean型別,null undefined和空字串取反都為false,其餘都為true。null true undefined true true 100 false abc false2...

JavaScript中兩個感嘆號的作用

var o var test o.flag 等效於var test o.flag false alert test 由於對null與undefined用 操作符時都會產生true的結果,所以用兩個感嘆號的作用就在於,如果明確設定了o中flag的值 非null undefined 0 等值 自然tes...