我正在创建一个双向数组。
我的第一个方法是通常创建一个数组
我的第二种方法是使用backticks函数创建数组

let array=["1234"];

function createArrayByBakticks(obj)
{
return obj;
}

let backtickArray = createArrayByBakticks `1234`;// it's responding an array

console.log(array); //1st way and it returns an array
console.log(backtickArray ); //2nd way and it returns a same array

backtickArray.push(1);// but it's throwing an error while push a new value.

// Error: Uncaught TypeError: Cannot add property 1, object is not extensible


console.log(backtickArray);

以上两种方法都是作为数组数据返回的。但第二个数组不支持由反勾号生成的数组的内置函数。为什么?两种方式有什么区别?

最佳答案

createArrayByBakticks用作所谓的标记函数。传递给函数的第一个参数是包含模板文字的所有字符串的数组。
如果深入研究语言规范,section 12.2.9.3,那么您将看到在创建数组之后执行以下步骤:
执行setintegritylevel(模板,“冻结”)。
这意味着在您的情况下obj被冻结,不能添加任何属性。这就是为什么调用push不起作用。
您可以通过调用console.log(Object.isFrozen(backtickArray))来确认这一点。

10-07 12:15