一元运算符+
把操作数转化为数字类型,是最快的。
10+'15' = '1015'
10++'15' = 25
shift() 与pop()
shift删除第一项并返回,pop删除最后一项
JS删除数组中某个元素
nums.splice(start,length,(newItem1,newItem2...))
delete nums[i]
var let const
let没有变量提升 --暂时性死区(TDZ)必须等let语句执行完后才能使用变量,否则报错
let不绑定全局对象
let重复声明报错
const必须初始化
function 的「创建」「初始化」和「赋值」都被提升了
apply call bind
都是用于改变this指向
apply(obj,[params])->可以直接给数组
call的参数直接逗号隔开 call(obj,param1,param2....)
bind返回一个新函数,需要重新执行,其余都和call一样
不传obj则为window
转型函数
Boolean() String() Number() Bigint() Symbol()
| Boolean() | Number() | String() | |
|---|---|---|---|
| null | false | 0 | "null" |
| undefined | false | NaN | "undefined" |
Object(value)
如果value是null或undefined,返回空对象
如果value是原始类型,返回构造出的包装类型的对象
var s = Object('abc')
console.log(s instanceof String)//true
如果value是引用类型,不变
typeof instanceof
typeof 判断数据类型 但只能返回八种类型(数组会返回Object)
instanceof判断是否是某对象的实例
判断是否是数组
a instanceof(Array)
a.cosntructor === Array
都是通过访问原型链来判断
Array.isArray(a)
原理:
Object.prototype.toString.call(a) === [Object Array]
new 做了什么?
新建对象
改变原型指向
以新建对象为this调用构造函数
js事件三个过程
捕获过程:从window开始向下
目标过程:
冒泡过程:从目标开始向上
addEventListener默认冒泡,第三个参数设为true即可变为捕获
event.preventDefault() 阻止默认行为
event.stopPropagation()阻止捕获和冒泡阶段进一步传播
jsDOM对象
&,!,|,&&,!!,||
&,| 位运算
!转为布尔 !100 ==false
!!用于判断非空则true