~作用于数字有如下规则
-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')