函数参数传递的步骤
创建对象;
找形参和变量声明,
将变量和形参名作为AO属性名,
值为undefined将实参值和形参值统一
在函数体里找函数声明,值赋予函数体
对象操作
- 冻结
Object.freeze(obj);
- 密封
Object.seal(obj);
- 扩展
Object.preventExtensions(obj);
- 配置对象属性
Object.defineProperty(obj, "name", {
value : "tujiawei",
writable : false,
configurable : true,
enumerable : false,
});
prototype
原型是function 对象的一个属性,
它定义了构造函数制造出的对象的共有祖先
通过该构造函数产生的对象
可以继承该原型的属性和方法
原型也是对象
document的原型
document --> HTMLDocument.prototype -->Document.prototype
// 全局查找定义过的symbol
// 如果定义过,就返回那个symbol,
// 如果没有定义过
// 就生成
Symbol.for( 'name');
// 提取注册符号的描述文本
Symbol.keyFor( symbol );
// 加[] 是为了让key可以用变量
// 这种方式不会出现在枚举属性中
var obj = {
[ Symbol() ]: "Hello World"
};
// 可以用 Object.getOwnPropertySymbols( obj) 方式获取
// 数组迭代其
// 字符串也可以
var arr = [1, 2, 3, 4];
for(var i of arr[Symbol.iterator]()) {
console.log(i);
} // 1 2 3 4
// 手动生成迭代器
{
[Symbol.iterator]() {
return this;
}
}
生成器函数可以调用 it.return(data)方法,直接结束
it.throw(error) 也可以
new.target 指向new实际上调用的构造器
ES6 提供的带类数组构造器
new Int8Array()
uint8Array
uint8ClampedArray 0~255 之间
Int16Array Uint16Array
Int32Array Uint32Array
Float32Array 32位浮点数
Float64Array 64位浮点数
对象只能用 字符串作为 key
Map 可以使用 对象作为key值
Set 值是唯一的
// target, startIndex, endIndex
var arr = [1, 2, 3, 4, 5];
var res = arr.copyWithin(3, 0);
console.log(res); // 1 2 3 1 2
var res = arr.find(v => {
return v == 2;
}); // 如果有 返回原值,否则undefined
arr.findIndex(v => {
return v == 2;
}); // 返回下标
以?开头为 非捕获组
(?=a) 后面跟a
(?!a) 后面不跟a
(?<=a) 前面是a
(?<!a) 前面不是a
(?i:a)b a不区分大小写 匹配ab Ab
(?>pattern) 侵占模式
意思时:如果匹配到了1-9之间的数字,就不会去管了
本来?是可以不匹配的,由最后的\d+去匹配
但是侵占式就直接拿到了,适用于提高效率
常用来截断
\d+\.\d\d[1-9]?+\d+ 改为 \d+\.\d\d(?>[1-9]?)\d+