乙個感嘆號(!)最好理解,也是我們經常使用的。!可以將變數轉為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:該運算子主要用於函式呼叫。
function
add(x, y)
var
numbers = [4, 38];
add(...numbers)
// 42
// es5 的寫法
null
, [14, 3, 77])
// es6 的寫法
math.max(...[14, 3, 77])
// 等同於
math.max(14, 3, 77);
例子3:通過push函式,將乙個陣列新增到另乙個陣列的尾部
// es5的 寫法
var
arr1 = [0, 1, 2];
var
arr2 = [3, 4, 5];
// es6 的寫法
var
arr1 = [0, 1, 2];
var
arr2 = [3, 4, 5];
arr1.push(...arr2);
例子4:合併陣列
// es5
[1, 2].concat(more)
// es6
[1, 2, ...more]
var
arr1 = [
'a'
,
'b'
];
var
arr2 = [
'c'
];
var
arr3 = [
'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...