2018-10-10 18:03:03 -04:00
|
|
|
---
|
|
|
|
id: 56533eb9ac21ba0edf2244c8
|
2021-01-13 09:11:33 -08:00
|
|
|
title: 通过方括号表示法访问对象属性
|
2018-10-10 18:03:03 -04:00
|
|
|
challengeType: 1
|
2020-04-29 18:29:13 +08:00
|
|
|
videoUrl: 'https://scrimba.com/c/cBvmEHP'
|
|
|
|
forumTopicId: 16163
|
2021-01-13 03:31:00 +01:00
|
|
|
dashedName: accessing-object-properties-with-bracket-notation
|
2018-10-10 18:03:03 -04:00
|
|
|
---
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --description--
|
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
访问对象的第二种方式是方括号表示法(`[]`)。如果你想访问的属性名中包含空格,就必须使用方括号表示法来获取它的属性值。
|
2020-12-16 00:37:30 -07:00
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
当然,如果属性名不包含空格,我们也可以使用方括号表示法。
|
2020-12-16 00:37:30 -07:00
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
这是一个使用方括号表示法(`[]`)读取对象属性的例子:
|
2020-04-29 18:29:13 +08:00
|
|
|
|
|
|
|
```js
|
|
|
|
var myObj = {
|
|
|
|
"Space Name": "Kirk",
|
|
|
|
"More Space": "Spock",
|
|
|
|
"NoSpace": "USS Enterprise"
|
|
|
|
};
|
|
|
|
myObj["Space Name"]; // Kirk
|
|
|
|
myObj['More Space']; // Spock
|
|
|
|
myObj["NoSpace"]; // USS Enterprise
|
|
|
|
```
|
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
注意,属性名中如果包含空格,就必须把属性名称用单引号或双引号包裹起来。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --instructions--
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
请使用方括号表示法读取对象 `testObj` 中 `an entree` 和 `the drink` 的属性值,并分别赋值给 `entreeValue` 和 `drinkValue`。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --hints--
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
`entreeValue` 应为一个字符串。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
|
|
|
```js
|
2020-12-16 00:37:30 -07:00
|
|
|
assert(typeof entreeValue === 'string');
|
2018-10-10 18:03:03 -04:00
|
|
|
```
|
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
`entreeValue` 的值应为 `"hamburger"`。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
```js
|
|
|
|
assert(entreeValue === 'hamburger');
|
|
|
|
```
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
`drinkValue` 应为一个字符串。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
|
|
|
```js
|
2020-12-16 00:37:30 -07:00
|
|
|
assert(typeof drinkValue === 'string');
|
2018-10-10 18:03:03 -04:00
|
|
|
```
|
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
`drinkValue` 的值应为 `"water"`。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
```js
|
|
|
|
assert(drinkValue === 'water');
|
|
|
|
```
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2021-01-13 09:11:33 -08:00
|
|
|
你应使用两次方括号表示法。
|
2020-04-29 18:29:13 +08:00
|
|
|
|
2018-10-10 18:03:03 -04:00
|
|
|
```js
|
2020-12-16 00:37:30 -07:00
|
|
|
assert(code.match(/testObj\s*?\[('|")[^'"]+\1\]/g).length > 1);
|
2018-10-10 18:03:03 -04:00
|
|
|
```
|
2020-04-29 18:29:13 +08:00
|
|
|
|
2021-01-13 03:31:00 +01:00
|
|
|
# --seed--
|
|
|
|
|
|
|
|
## --after-user-code--
|
|
|
|
|
|
|
|
```js
|
|
|
|
(function(a,b) { return "entreeValue = '" + a + "', drinkValue = '" + b + "'"; })(entreeValue,drinkValue);
|
|
|
|
```
|
|
|
|
|
|
|
|
## --seed-contents--
|
|
|
|
|
|
|
|
```js
|
|
|
|
// Setup
|
|
|
|
var testObj = {
|
|
|
|
"an entree": "hamburger",
|
|
|
|
"my side": "veggies",
|
|
|
|
"the drink": "water"
|
|
|
|
};
|
|
|
|
|
|
|
|
// Only change code below this line
|
|
|
|
|
|
|
|
var entreeValue = testObj; // Change this line
|
|
|
|
var drinkValue = testObj; // Change this line
|
|
|
|
```
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --solutions--
|
|
|
|
|
2021-01-13 03:31:00 +01:00
|
|
|
```js
|
|
|
|
var testObj = {
|
|
|
|
"an entree": "hamburger",
|
|
|
|
"my side": "veggies",
|
|
|
|
"the drink": "water"
|
|
|
|
};
|
|
|
|
var entreeValue = testObj["an entree"];
|
|
|
|
var drinkValue = testObj['the drink'];
|
|
|
|
```
|