相对於其他数据类型,object在JavaScript中用来储存键值对(Key-Value Pair),或是用来储存更复杂的实体。
Object宣告的方法有两种:
可以通过括号来创建,括号内的属性列表是可选的,一个属性就是一个键值对(key : value),其中键(key)是字符串,值(value)可以是任何值。
let a = {...}
用new关键字加上Object()来宣告一个物件。
let b = new Objetc()
Object中新增property有两种方法:
let myObj = new Object();
let str = 'myString';
let randNum = Math.random();
let obj = new Object();
myObj.type = 'Dot syntax';
myObj['date created'] = 'String with space';
myObj[str] = 'String value';
myObj[randNum] = 'Random Number';
myObj[obj] = 'Object';
myObj[''] = 'Even an empty string'
console.log(myObj)
//
type: "Dot syntax"
myString: "String value"
date created: "String with space"
[object Object]: "Object"
0.4381989149265799: "Random Number"
"": "Even an empty string"
属性的简写:
function makeCar(type, color) {
return {
type, // 等於 type : type
color // 等於 color : color
}
}
变数不能是保留字,例如: for、let、return等,但是属性名称是没有限制的。
let obj = {
for:123,
let:456,
return:789
}
其他类型也会自动被转换为字串:
let obj = {
0:"test" // 等同於 "0":"test"
}
console.log(obj[0]) // test
这里有个例外,__proto__这个属性是不能被设定为属性的,在後面的文章会提到。
Object还有一个特别的地方就是去读取不存在的属性不会报错,只会回传undefined,所以可以很简单的做一个属性存在的判断:
let user = {}
console.log(user.id) //undefined
但是如果属性的值刚好是undefined的话,上面这个方法就不行,改用另一个检查方法是操作符"in":
let user = {
id:1,
name:'John',
age:20
}
console.log('name' in user); // true
console.log('height' in user); // false
"in"操作符的左边必须是属姓名,通常是字串,如果省略引号的话就视为变数:
let user = {
id:1,
name:'John',
age:20
}
let key = "age"
console.log(key in user)
这个方法可以遍历object的属性。
语法:
for(key in object) {
//这边可以针对key这个属性作一些操作
}
举一个简单的例子:
let user = {
id:1,
name:'John',
age:20
}
for(let key in user) {
console.log(key)
}
所有遍历的属性是有规则的:
举个例子会比较快明白:
let classmates = {
"10":"David",
"9":"Tina",
//...
"1":"John"
}
for(let studentId in classmates) {
console.log(studentId) // 1 9 10
}
非负整数属性: 如果一个字符串把它转换为整数後再转换为数字,如果与原本一样,就是整数属性。
console.log(String(Math.trunc(Number("10")))) //10 相同,整数属性
console.log(String(Math.trunc(Number("+10")))) //10 不同
console.log(String(Math.trunc(Number("10.5")))) //10 不同
console.log(String(Math.trunc(Number("-10")))) //-10 不同 归类为其他类别
一样用一个简单的例子:
let classmates = {
"10":"David",
"+9":"somebody"
"9":"Tina",
//...
"1":"John",
"0":"Teacher"
"-1":"NegativeNum"
"otherType":"otherTypeValue"
}
for(let key in classmates) {
console.log(key)
}
//
0
1
9
10
+9
-1
otherType
参考资料:
Object
JavaScript Info
JavaScript | 关於 Object ,一口气全说完
JavaScript Object (物件)
简介 上一篇介绍了一维阵列的用法还有如何宣告,今天就来介绍二维阵列 还有一些我们在写 code 时需...
本篇同步发文在个人Blog: [读书笔记] Threading in C# - PART 1: GE...
笔者最近在维护前人弃坑的C# 专案的程序码看到?跟:,这是啥东西? 一开始以为是lambda 在C#...
安装Unreal的过程意外频出啊,差点以为我的电脑出事了,结果是因为我time machine开着,...
能载舟,能覆舟 前几篇似乎说了很多 Rails 的坏话,但其实 Rails 是一套工具,工具没有好坏...