返回

JavaScript冷知识集锦二

前端

前言

在上一篇文章中,我们分享了一些JavaScript冷知识。在这篇文章中,我们将继续分享一些冷知识,希望对大家有所帮助。

对象防篡改

我们可以通过Object.freeze()方法来防止对象被篡改。该方法将对象的所有属性设置为不可写,并且无法添加或删除任何属性。

const obj = {
  name: 'John Doe',
  age: 30
};

Object.freeze(obj);

obj.name = 'Jane Doe'; // TypeError: Cannot assign to read-only property 'name' of object '#<Object>'
obj.age = 31; // TypeError: Cannot assign to read-only property 'age' of object '#<Object>'

console.log(obj); // { name: 'John Doe', age: 30 }

判断对象是否可扩展

我们可以通过Object.isExtensible()方法来判断一个对象是否可扩展。如果一个对象是可扩展的,那么我们可以添加或删除它的属性。如果一个对象是不可扩展的,那么我们就不能添加或删除它的属性。

const obj1 = {};
console.log(Object.isExtensible(obj1)); // true

const obj2 = Object.freeze({});
console.log(Object.isExtensible(obj2)); // false

NaN的类型是数字

NaN是Not a Number的缩写,它表示一个不是数字的值。但是,NaN的类型是数字。我们可以通过typeof运算符来验证这一点。

console.log(typeof NaN); // "number"

数组快速拉平

我们可以使用Array.prototype.flat()方法来快速将一个多维数组拉平成一个一维数组。

const arr = [1, 2, [3, 4], [5, 6, [7, 8]]];
console.log(arr.flat()); // [1, 2, 3, 4, 5, 6, 7, 8]

JSON.stringify

JSON.stringify()方法可以将一个JavaScript对象转换为JSON字符串。该方法可以接受一个可选的第二个参数,该参数是一个函数,用于对对象中的每个属性进行转换。

const obj = {
  name: 'John Doe',
  age: 30
};

const json = JSON.stringify(obj, (key, value) => {
  if (typeof value === 'number') {
    return value.toString();
  } else {
    return value;
  }
});

console.log(json); // "{\"name\":\"John Doe\",\"age\":\"30\"}"

结语

以上是5个JavaScript冷知识。希望大家能够学以致用,在实际开发中灵活运用。