我正在创建一个双向数组。
我的第一个方法是通常创建一个数组
我的第二种方法是使用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))
来确认这一点。