~作用于數字有如下規(guī)則
-3 | -2 | -1 | 0 | 1 | 2 | 3 ===>
2 | 1 | 0 | -1|-2 |-3|-4
基于-1會轉換成0,常常用于判斷數組查找返回索引,若不包含則會返回-1,所以有
var arr=[1,2,3,4];
var num=3;
var idx=arr.indexOf(num)
if(~idx){ //相當于idx!=-1,即找到了要檢測的值
dosomething;
}
~~ 轉換成數字并且把小數點去掉 效率比Math.floor高
| 3.1415 | 0 也是取整
!!~ 判斷一個數是否大于0 大于0 返回true 小于0返回false
!! 相當于Boolean(),轉換一個值為布爾值
!str1.indexOf(str2) //這句的意思,如果str2處于str1開始的位置,則為true.
+ 字符串轉數字 +'23'====>23
... 三點操作符,主要用于解構對象
作用1:數組去重:
var arr1 = [1, 3, 3, 5, 6, 1, 8, 9]
var r = [...new Set(arr1)]
作用2:數組拷貝:
var arr1 = [1, 2, 3]
var arr2 = [...arr1]
//數組合并
var arr1 = [1, 3, 5]
var arr2 = [2, 4, 6]
var r = [...arr1, ...arr2]
//字串打散成數組
var str = 'abcdef'
var r = [...str]
//數組解構
var [a, ...rest] = [1, 2, 3, 4, 5]
console.log(a)
console.log(rest)
//數組轉對象
var arr = ['aaa', 'bbbb', 'cccc']
console.log({ ...arr});
作用3:對象拷貝: 和Object.assign()
var obj1 = {a: 1,b: 2}
var obj2 = {...obj1}
//對象合并,如果有相同的屬性,后面的會覆蓋前面的
var obj1 = {a: 1,b: 2,c: 100}
var obj2 = {c: 3,d: 4}
var obj = {...obj1,...obj2}
//對象解構
var obj = {a: 1,b: 2,c: 3,d: 4,e: 5}
var {a,b,...objrest} = obj
console.log(a, b);
console.log(objrest)
-------------------------------------
var obj = {name: 'john',age: 23,sex: 'male',address: {home: "beijing",work: "shanghai"}}
var {name: ee,age,sex,address} = obj
var {home,work} = obj.address
//函數不定參數
function unsure(a, ...args) {
console.log(args.length);
}
unsure(1, 3, 5, 6, 'aaa')