【JavaScript】零散知识点

2021/09/08 18:14:59

隐式类型转换

  1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值
  2. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值
  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较
  4. 如果两个操作数都是对象,则比较他们是不是同一个对象
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; 比较内存地址是不是同一个

操作符

  1. delete用于删除对象的某个属性,如果没有指向这个属性的引用(可被垃圾回收机制处理),最终会被释放(通过断开引用实现,删除数组时长度不会变化)
  2. delete只会在自身的属性上起作用,不会影响到原型链上的同名属性
  3. 全局定义的函数不能被删除,对象中的函数可以被删除
  4. 不可配置的属性不能被删除
  5. delete操作符无法删除var定义的变量,因为var定义的变量的configurable属性为false

定时器

  1. setTimeout的第三个参数(可跟无数个)为一参回调函数的参数列表

非十进制数值表示方法

  1. 二进制0b开头,如: 0b10
  2. 八进制0开头,如: 080
  3. 十六进制0x开头,如: 0x36

window.onload和$(document).ready()区别

  1. 执行时间:

    window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。

    $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

  2. 绑定数量不同:

    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

骚操作

  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