属性 名称中的点字符

dot character in property name

我从 jest documentation 那里得到了这个代码片段。 在该示例中,其中一个变量名为 ceiling.height,并且是名称中唯一带有点 . 的变量。使用名称中带点的变量的目的是什么,以保证文档中的这个示例?

  const houseForSale = {
    bath: true,
    bedrooms: 4,
    kitchen: {
      amenities: ['oven', 'stove', 'washer'],
      area: 20,
      wallColor: 'white',
      'nice.oven': true,
    },
    'ceiling.height': 2,
  };

目的是以平面格式存储嵌套对象,即。一个数据库 table。 您可以使用 dottie.js 之类的东西将这个平面对象转换为嵌套对象

const values = {
  'user.name': 'Gummy Bear',
  'user.email': 'gummybear@candymountain.com',
  'user.professional.title': 'King',
  'user.professional.employer': 'Candy Mountain'
};
const transformed = dottie.transform(values);

我们现在发现这是 transformed

的值
{
  user: {
    name: 'Gummy Bear',
    email: 'gummybear@candymountain.com',
    professional: {
      title: 'King',
      employer: 'Candy Mountain'
    }
  }
}

为什么他们在示例中那样使用它似乎是为了让他们可以提供一个示例(如下)来说明如何访问这些类型的变量名。想象一下,您希望 Jest docs 中的 .toHaveProperty(keyPath value?) 函数对上述示例中 values 对象中的 属性 进行操作。这向您展示了如何将此函数与 属性.

一起使用
// Referencing keys with dot in the key itself
expect(houseForSale).toHaveProperty(['ceiling.height'], 'tall');

除非你有很好的理由,否则使用这些类型的变量名并不是最佳做法,我也不推荐这样做。也就是说,虽然带有 . 字符的变量名称不能与点语法一起使用:

houseForSale.ceiling.height = undefined

仍然可以使用括号语法访问:

houseForSale['ceiling.height'] = 2