【JavaScript】零散知识点
2021/09/08 18:14:59
隐式类型转换
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值
- 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较
- 如果两个操作数都是对象,则比较他们是不是同一个对象
1 + null; // 1; Number(null) == 0
1 + undefined; // NaN;
// 复杂数据类型转number:
// 先使用valueOf()获取其原始值,如果原始值不是number类型,则先调用toSting(),然后将字符串转为number
[] == 0; // true; [] ==> number, Numebr([]) == 0
![] == 0; // true; ![] ==> boolean, Boolean([]) == true, ![] == Boolean(0) == false
[] == ![]; // true; ![] == false, Number([]) == 0 == false == ![]
[] == []; // false; 比较内存地址是不是同一个
{} == !{}; // false; !{} == false, {}转number先调用toString -->'[object Object]' --> NaN
{} == {}; // false; 比较内存地址是不是同一个
操作符
- delete用于删除对象的某个属性,如果没有指向这个属性的引用(可被垃圾回收机制处理),最终会被释放(通过断开引用实现,删除数组时长度不会变化)
- delete只会在自身的属性上起作用,不会影响到原型链上的同名属性
- 全局定义的函数不能被删除,对象中的函数可以被删除
- 不可配置的属性不能被删除
- delete操作符无法删除var定义的变量,因为var定义的变量的configurable属性为false
定时器
- setTimeout的第三个参数(可跟无数个)为一参回调函数的参数列表
非十进制数值表示方法
- 二进制
0b
开头,如:0b10
- 八进制
0
开头,如:080
- 十六进制
0x
开头,如:0x36
window.onload和$(document).ready()区别
执行时间:
window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。
$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
绑定数量不同:
window.onload不能同时编写多个,如果有多个window.onload方法,只会执行最后一个
$(document).ready()可以同时编写多个,并且都可以得到执行
函数声明提升相当于在当前块内声明变量
var a = 0;
{
a = 1;
function a() {};
// 函数声明提升时相当于在当前块级作用域内声明了一个同名变量
// 后续的修改改变的是块级作用域内的变量 a, 不会影响到 window.a
a = 21;
console.log(a); // 21
}
console.log(a) // 1
骚操作
'dfsdfsfsdf'.split('s').length - 1
用split求一个字符在字符串中出现的次数
一、使(a == 1 && a == 2)为true
// 对象转数字的时候用的 valueOf, 转字符串用的 toString
var a = {
value: 0,
valueOf: function () {
this.value++;
return this.value;
}
};
console.log(a == 1 && a == 2);//true