js(ES6)中感嘆號(!)和三個點(...)


一、感嘆號

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM