一、感嘆號
1. 一個感嘆號
一個感嘆號(!)最好理解,也是我們經常使用的。!可以將變量轉為boolean值,所有的truthy和falsy都可以被轉化,比如null、undefined、數字0和空字符串取反都為true,其余都為false。
!null = true
!undefined = true
!"" = true
!0 = true
!100 = false
!"asdss" = false
注意:truthy和falsy不是true和false
2. 兩個感嘆號
兩個感嘆號(!!),學習時比較少見到,通常用來判斷變量是不是truthy或者falsy,這么說好像和前面一樣?不,一個感嘆號只是單個判斷比如只對null或者只對undefined,使用兩個!!可以對所有truthy和falsy判斷,比如:
let a; // null、undefined、''、0
if (a !== null && typeof(a) !== "undefined" &&
a !== undefined && a !== '' && a !== 0){
//a為truthy時才執行,或者說a為真值時才執行
}
let a;
if(!!a){
//a為truthy時才執行,或者說a為真值時才執行
}
這兩種方法的功能一樣,但是明顯下面一種更加簡潔。
備注:好像還有三個!!!的,但是並沒有什么用處。似乎是將1和2都做了一遍,然后回到原點。
以上參考原文鏈接:https://blog.csdn.net/weixin_40877427/article/details/85627780
二、3個點(…)
1、說明
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
2、作用
將一個數組轉為用逗號分隔的參數序列。
例子1:該運算符主要用於函數調用。
function
add(x, y) {
return
x + y;
}
var
numbers = [4, 38];
add(...numbers)
// 42
例子2:擴展運算符取代apply方法的一個實際的例子,應用Math.max方法,簡化求出一個數組最大元素的寫法。
// ES5 的寫法
Math.max.apply(
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];
Array.prototype.push.apply(arr1, arr2);
// 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'
]
// [ "h", "e", "l", "l", "o" ]
以上參考原文鏈接:https://www.cnblogs.com/wangyunhui/p/7511615.html