js复杂数据类型——对象应该注意的问题①

本文探讨了如何判断JavaScript对象中的键是否存在,包括使用`undefined`和`in`操作符,并解析了对象属性的顺序特性,特别是整数属性与非整数属性的输出顺序。同时,提出了解决整数属性排序问题的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

抽了一点点时间把前端的复杂数据类型(对象)回顾了一下,今天重新拾笔记录自己的成长历程,以下记录一下之前自己学习时忽略的内容。


一、如何判断对象中的键是否存在?

1. undefined?

假设我们有一个user对象,其中有name属性和age属性,我们判断对象中是否存在gender属性。
代码如下(示例):

let user = {
  name: 'Leo',
  age: 23,
}

console.log(user.gender === undefined) // true

通过判断对象下的属性是否与undefined相等,我们能知道这个属性是不存在的。

2. in 操作符

判断对象中的键是否等于undefined的方法虽然简单,但是仅限于我们自己创建的对象。假设我们要判断一个不是由我们自己创建的对象该怎么办呢?

还有一种情况就是,user对象中本来就存在一个gender属性,其默认值为undefiend,虽说这种情况很少出现,我们一般不知道给属性赋什么值的时候,我们会选择赋值为null
代码如下(示例):

let user = {
  name: 'Leo',
  age: 23,
  gender: undefined,
}
// 结果拿到的是true,我们能确保gender属性就不存在吗?
console.log(user.gender === undefined) // true

由此引出更好的解决方案,使用 in 操作符

let user = {
  name: 'Leo',
  age: 23,
  gender: undefined,
}

console.log('gender' in user)  // true
console.log('score' in user)  // false

通过这样的判断我们就不会失手啦~

二、对象是否有顺序?

简短的回答是:“有特别的顺序”:整数属性会被进行排序,其他属性则按照创建的顺序显示。

1. 属性名是整数

当属姓名是整数的时候,在打印对象的键的时候,会是怎样的顺序输出呢?
代码如下(示例):

let codes = {
  "49": "Germany",
  "41": "Switzerland",
  "44": "Great Britain",
  // ..,
  "1": "USA"
};

for(let code in codes) {
  alert(code); // 1, 41, 44, 49
}

2. 属性名非整数

当属性名非整数的时候,会按照我们写入的顺序输出。

代码如下(示例):

let user = {
  name: "John",
  surname: "Smith"
};
user.age = 25; // 增加一个

// 非整数属性是按照创建的顺序来排列的
for (let prop in user) {
  alert( prop ); // name, surname, age
}

3. 顺序输出整数属性名

第一种情况,我们不想让计算机替我们排序,就是想要按照写入对象的顺序输出,我们应该怎么办呢?

我们可以使用非整数属性名来 欺骗 程序。只需要给每个键名加一个加号 “+” 前缀就行了。

代码如下(示例):

let codes = {
  "+49": "Germany",
  "+41": "Switzerland",
  "+44": "Great Britain",
  // ..,
  "+1": "USA"
};

for (let code in codes) {
  alert( +code ); // 49, 41, 44, 1
}

总结

距离上次更新文章过去了好久,与其羡慕别人,不如自己背起行囊砥砺前行。无休止的学习才是人生该有的态度……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值