JSON.stringify()
- 将一个 JavaScript 对象或值转换为 JSON 字符串
- 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值
- 函数、undefined 被单独转换时,会返回 undefined
- NaN 和 Infinity 格式的数值及 null 都会被当做 null。
Math.random
- 返回 0(含)和 1(不含)之间的随机数
Array
- 改变原数组
- push() 在数组尾部添加元素,返回的是更新后数组的长度。
- pop() 删除数组的最后一个元素,并返回
- shift() 删除数组的第一个元素,并返回
- unshift() 在数头尾部添加元素,返回的是更新后数组的长度。
- reverse() 降序
- sort() 升序
- splice(index,howmany,要添加的新数据),返回被删除元素所组成的数组。
- 不改变原数组
- concat()
- join()
- slice()数组元素截取(开始位置,结束为止)
- Array.from()
- 从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例
事件的三个阶段
- 捕获阶段
- 目标阶段
- 冒泡阶段: 事件绑定是在冒泡阶段,所以事件的执行是由里到外
event.stopPropagation
- 阻止继续向外冒泡
事件的委派
将事件统一绑定给元素共同的祖先元素(后代元素事件触发时,通过冒泡,通过祖先元素的响应函数来处理事件),这样可以只绑定一次,即可应用到多个元素上。事件的委派利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能event中的target表示的触发事件的对象 ,使用它对触发事件的元素进行判断
["0x1", "0x2", "0x3"].map(parseInt) 的结果
- 结果:[1,NaN,0].
- parseInt(string, radix)
- 参数radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
- parseInt("0x1", 0): 不存在0进制,发现“0x1”是一个16进制的数,所以它会把“0x1”当作一个16进制的数然后再转化为10进制
- parseInt("0x2", 1):因为没有不存在1进制的数,所以就直接返回NaN
- parseInt("0x3", 2):“0x3”当作二进制数然后转化为10进制数,二进制数就只包含0和1,所以在“0x3”中在满足条件的最前面就只有0,所以二机制0转化为10进制为0.
字符串虽然有长度,但是的它的截断方法不生效,数组的话就会生效
var str = "我非常喜欢编程";
str.length = 3;
console.log(str);
一道题
function test() {
getName = function() {
Promise.resolve().then(() => console.log(0));
console.log(1);
};
return this;
}
test.getName = function() {
setTimeout(() => console.log(2), 0);
console.log(3);
};
test.prototype.getName = function() {
console.log(4);
};
var getName = function() {
console.log(5);
};
function getName() {
console.log(6);
}
test.getName(); // 3 2(宏)
getName(); //5
test().getName(); //1 0( 微)
getName(); // 1 0(微)
new test.getName();// 3 2(宏)
new test().getName(); // 4
new new test().getName(); //4
// 3 5 1 1 3 4 4 0 0 2 2
Object.defineProperty
- Object.defineProperty(obj, prop, descriptor)
- obj: 要定义属性的对象
- prop: 要定义或修改的属性的名称或Symbol
- descriptor: 要定义或修改的属性描述符
- 数据描述符: 一个具有值的属性,该值可以是可写的,也可以是不可写的
- 存取描述符: 由 getter 函数和 setter 函数所描述的属性
- 描述符
数据描述符与存取描述符都是对象- 一个描述符只能是这两者其中之一;不能同时是两者
- 这两种描述符都是对象
共有可选键值- configurable:属性能否被删除。默认值为false
- enumerable:属性能否被枚举。默认值为false
数据描述符还具有以下可选键值- value: 属性对应的值。默认值为undefined
- writable:属性能否被更改。默认值为false
存取描述符还具有以下可选键值- get: 属性的 getter 函数,如果没有 getter,则为
undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。默认值为undefined - set:属性的 setter 函数,如果没有 setter,则为
undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的this对象。默认值为undefined
- get: 属性的 getter 函数,如果没有 getter,则为
generator 生成器
- 生成器对象是由一个
generator function返回的 - Generator.prototype.next()
- 返回一个包含属性
done和value的对象 - 也可以通过接受一个参数用以向生成器传值
- 返回一个包含属性
- Generator.prototype.return(value)
- 返回给定的值并结束生成器
function* gen() {
yield 1;
yield 2;
yield 3;
}
let g = gen();
console.log(g.next()) //{value: 1, done: false}
console.log(g.next()) //{value: 2, done: false}
console.log(g.next()) //{value: 3, done: false}
console.log(g.next()) //{value: undefined, done: true}