ECMAScript

函数参数传递的步骤

  1. 创建对象;

  2. 找形参和变量声明,
    将变量和形参名作为AO属性名,
    值为undefined

  3. 将实参值和形参值统一

  4. 在函数体里找函数声明,值赋予函数体

对象操作

  1. 冻结
Object.freeze(obj);
  1. 密封
Object.seal(obj);
  1. 扩展
Object.preventExtensions(obj);
  1. 配置对象属性
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+
上一篇:我的ECMAscript 待续


下一篇:【JavaScript基础#1】 �