前言
抽了一点点时间把前端的复杂数据类型(对象)回顾了一下,今天重新拾笔记录自己的成长历程,以下记录一下之前自己学习时忽略的内容。
一、如何判断对象中的键是否存在?
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
}
总结
距离上次更新文章过去了好久,与其羡慕别人,不如自己背起行囊砥砺前行。无休止的学习才是人生该有的态度……