1.对象和数组很相似,数组是通过索引来访问和修改数据,对象是通过属性来访问和修改数据的,

对象适合用来存储结构化数据,就和真实世界的对象一模一样,比如一只猫.

任务

创建一个叫做myDog的对象,它里面有这些属性: 名称"name"腿"legs", 尾巴"tails"朋友"friends"

你可以设置对象属性为任何你想要的值,只要 "name" 是字符串、 "legs""tails" 是数字、"friends" 是数组,

// 请只修改这条注释以下的代码

var myDog = {        //对象是
"name": "Kitty",     //属性有"name","legs" ,"tails","friends",属性名之间用逗号分开
"legs": 4,
"tails": 1,
"friends": ["mikey","bob",["tom","joy"]]

};

2.有两种方式访问对象属性,一个是点操作符(.),一个是中括号操作符([]),当你知道属性的名称的时候,使用点操作符

任务

通过点操作符读取对象testObj,把hat的属性值赋给变量hatValue,把shirt的属性值赋给shirtValue,

// 初始化变量
var testObj = {
"hat": "ballcap",
"shirt": "jersey",
"shoes": "cleats"
};

// 请只修改这条注释以下的代码

var hatValue = testObj.hat; // 请修改这一行//把对象testObj的属性hat的值赋给变量 hatValue 
var shirtValue = testObj.shirt; // 请修改这一行//属性名没有空格,不需要加引号,用点号操作符,反之加引号和用中括号操作符

3.如果你想访问的属性的名称有一个空格,这时你只能使用中括号操作符([]),

提示:属性名称中如果有空格,必须把属性名称用单引号或双引号包裹起来

任务

用中括号操作符读取对象testObj的属性"an entree"值和属性"the drink"值,

// 初始化变量
var testObj = {
"an entree": "hamburger",
"my side": "veggies",
"the drink": "water"
};

// 请只修改这条注释以下的代码

var entreeValue = testObj['an entree']; // 请修改这一行
var drinkValue = testObj["the drink"]; // 请修改这一行

4.中括号操作符的另一个使用方式是用变量来访问一个属性,

当你需要遍历对象的属性列表或查表时,这种方式极为有用,

提示:当我们通过变量名访问属性的时候,不需要给变量名包裹引号。因为实际上我们使用的是变量的值,而不是变量的名称

任务

使用变量 playerNumber,通过中括号操作符找到 testObjplayerNumber16 的值

// 初始化变量
var testObj = {
12: "Namath",
16: "Montana",
19: "Unitas"
};

// 请只修改这条注释以下的代码

var playerNumber=16; // 修改这一行
var player = testObj[playerNumber]; // 修改这一行

5.当你创建了一个对象后,你可以用点操作符或中括号操作符来更新对象的属性,

任务

更新 myDog 对象的name属性,让它的名字从 "Coder" 变成 "Happy Coder"

// 初始化变量
var myDog = {
"name": "Coder",
"legs": 4,
"tails": 1,
"friends": ["Free Code Camp Campers"]
};

// 请把你的代码写在这条注释以下
myDog.name="Happy Coder";//有点类似于数组更改的方式

6.可以像更改属性一样给对象添加属性

任务

myDog添加一个"bark" 属性,设置它的值为狗的声音,例如:"woof"

// 初始化变量
var myDog = {
"name": "Happy Coder",
"legs": 4,
"tails": 1,
"friends": ["Free Code Camp Campers"]
};

// 请把你的代码写在这条注释以下
myDog.bark="woof";

7.同样可以删除对象的属性,例如:

delete ourDog.bark;

任务

删除myDog对象的"tails"属性

// 初始化变量
var myDog = {
"name": "Happy Coder",
"legs": 4,
"tails": 1,
"friends": ["Free Code Camp Campers"],
"bark": "woof"
};

// 请把你的代码写在这条注释以下

delete myDog.tails;

8.任务

把switch语句转化为一个叫做lookup的对象

/////////////////////////////////////////////////////////////////

// 定义 phoneticLookup
function phoneticLookup(val) {
var result = "";

// 请只修改这条注释以下的代码
switch(val) {
case "alpha":
result = "Adams";
break;
case "bravo":
result = "Boston";
break;
case "charlie":
result = "Chicago";
break;
case "delta":
result = "Denver";
break;
case "echo":
result = "Easy";
break;
case "foxtrot":
result = "Frank";
}

// 请只修改这条注释以上的代码
return result;
}

/////////////////////////////////////////////////////////////////

// 定义 phoneticLookup
function phoneticLookup(val) {
var result = "";

// 请只修改这条注释以下的代码
var lookup={
"alpha":"Adams",
'bravo':'Boston',
'charlie':'Chicago',
'delta':"Denver",
'echo':"Easy",
'foxtrot':"Frank"
};

// 请只修改这条注释以上的代码
result = lookup[val];
return result;
}

// 你可以修改这一行来测试你的代码
phoneticLookup("charlie");

9.我们可以用.hasOwnProperty(属性名)  //属性名是字符串要加引号//

方法来检查对象是否有该属性,如果有返回true,反之返回 false,

// 初始化变量
var myObj = {
gift: "pony",
pet: "kitten",
bed: "sleigh"
};

function checkObj(checkProp) {
// 请把你的代码写在这条注释以下
var tr = myObj.hasOwnProperty(checkProp); //检查对象是否存在,将结果赋值给tr
if(tr===true){ //判断tr是否true ?(存在)
return myObj[checkProp]; // //存在则返回属性对应的值
}else{
return "Not Found"; //不存在,则返回“Not Found”
} }
// 你可以修改这一行来测试你的代码
checkObj("gift");

10.JavaScript Object Notation 简称 JSON,它使用JavaScript对象的格式来存储数据,

JSON是灵活的,因为它允许 数据结构 是 字符串,数字,布尔值,字符串,和 对象 的任意组合

提示
数组中有多个 JSON 对象的时候,对象与对象之间要用逗号隔开

var myMusic = [
{
"artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP" ],
"gold": true

},
{ "artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP" ]},// 请在这里添加专辑
];

11.

任务

检索JSON对象 myStorage 中嵌套属性 glove box 的值,

因为属性的名字带有空格,请使用中括号操作符来访问属性的值

var myStorage = {
"car": {
"inside": {
"glove box": "maps",
"passenger seat": "crumbs"
},
"outside": {
"trunk": "jack"
}
}
};

// 请只修改这条注释以下的代码

var gloveBoxContents =myStorage.car.inside["glove box"] ; // 请修改这一行

12.

任务

使用点操作符和中括号操作符来检索变量 myPlants 的第二棵树

// 初始化变量
var myPlants = [
{
type: "flowers",
list: [
"rose",
"tulip",
"dandelion"
]
},
{
type: "trees",
list: [
"fir",
"pine",
"birch"
]
}
];

// 请只修改这条注释以下的代码

var secondTree =myPlants[1].list[1]; // 请修改这一行

13.

右边有一个JSON对象,代表着你的专辑集。每一张专辑由一个唯一的id标识,并具有多种属性。但并非所有的专辑都有完整的信息。

写一个函数,它有个三个参数,idpropvalue

如果 value !='' 而且prop != 'tracks'collectionCopy[id][prop]=value;

如果 value !='' 而且prop == 'tracks'collectionCopy[id][prop].push(value);

如果 value == ''delete collectionCopy[id][prop];

记住:函数返回的永远是整个对象。

提示
使用中括号操作符来 访问对象的变量属性,

// 初始化变量
var collection = {
2548: {
album: "Slippery When Wet",
artist: "Bon Jovi",
tracks: [
"Let It Rock",
"You Give Love a Bad Name"
]
},
2468: {
album: "1999",
artist: "Prince",
tracks: [
"1999",
"Little Red Corvette"
]
},
1245: {
artist: "Robert Palmer",
tracks: [ ]
},
5439: {
album: "ABBA Gold"
}
};
// 深拷贝 collection,用于测试
var collectionCopy = JSON.parse(JSON.stringify(collection));

// 请只修改这条注释以下的代码
function update(id, prop, value) {
if(value !==''&&prop !=='tracks'){
collectionCopy[id][prop]=value;
}
else if(value !==''&&prop =='tracks'){
collectionCopy[id][prop].push(value);
}
else if(value ===''){
delete collectionCopy[id][prop];
}

return collection;
}

// 你可以修改这一行来测试你的代码
update(5439, "artist", "ABBA");

14.

一个条件语句只能执行一次代码,而一个循环语句可以多次执行代码,

JavaScript 中最常见的循环就是“for循环”,

for循环中的三个表达式用分号隔开:

for ([初始化]; [条件判断]; [计数器])

初始化语句只会在执行循环开始之前执行一次。它通常用于定义和设置你的循环变量,

条件判断语句会在每一轮循环的开始执行,只要条件判断为 true 就会继续执行循环。当条件为 false的时候,

循环将停止执行,这意味着,如果条件在一开始就为 false,这个循环将不会执行,

计数器是在每一轮循环结束时执行,通常用于递增或递减,

任务

使用 for 循环把从 1 到 5 添加进 myArray 中。

for循环就是if条件语句的进化版

// 请把你的代码写在这条注释以下

var myArray=[];
for (var i=1;i<6;i++){
myArray.push(i);
}

15.

任务

写一个 for 循环,把从1到9的奇数添加到 myArray

// 初始化变量
var myArray = [];

// 请把你的代码写在这条注释以下
for(i=1;i<10;i+=2){
myArray.push(i);
}

16.for循环也可以逆向迭代,只要我们定义好合适的条件,

为了能够从后往前两两倒数,我们需要改变我们的 初始化条件判断计数器

任务

使用一个 for 循环,把9到1的奇数添加进 myArray

// 初始化变量
var myArray = [];

// 请把你的代码写在这条注释以下

for(i=9;i>0;i-=2){
myArray.push(i);
}

17迭代输出一个数组的每个元素是 JavaScript 中的常见需求, for 循环可以做到这一点,

记住数组的索引从零开始的,这意味着数组的最后一个元素的下标是:数组的长度 - 1,

任务

声明并初始化一个变量 total0。使用 for循环,使得 total 的值为 myArr 的数组中的每个元素的值的总和

// 初始化变量
var myArr = [ 2, 3, 4, 5, 6];

// 请把你的代码写在这条注释以下
var total=0;
for(var i=0;i<myArr.length;i++){
total+=myArr[i];
}

18.如果你有一个二维数组,可以使用相同的逻辑,先遍历外面的数组,再遍历里面的子数组,

一次输出 arr 中的每个子元素。提示,对于内部循环,我们可以通过 arr[i].length 来获得子数组的长度,

因为 arr[i] 的本身就是一个数组

任务

修改函数 multiplyAll,获得 arr 内部数组的每个数字相乘的结果 product,

function multiplyAll(arr) {            ///////不要把函数,变量,参数搞混
var product = 1;
// 请把你的代码写在这条注释以下
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr[i].length;j++) {

product*=arr[i][j];}}
// 请把你的代码写在这条注释以上
return product;
}

// 你可以修改这一行来测试你的代码
multiplyAll([[1,2],[3,4],[5,6,7]]);

19.另一种类型的 JavaScript 循环被称为while循环

因为它规定,当(while)条件为真,循环才会执行,反之不执行,

任务

通过一个 while 循环,把从 0 到 4 的值添加到 myArray

// 初始化变量
var myArray = [];

// 请把你的代码写在这条注释以下
var i=0;
while(i<5){
myArray.push(i);
i++;
}

20.

函数 lookUp 有两个预定义参数:firstName值和prop属性 ,

函数将会检查通讯录中是否存在一个与传入的 firstName 相同的联系人,

如果存在,那么还需要检查对应的联系人中是否存在 prop属性,

如果它们都存在,函数返回prop属性对应的值。

如果firstName 值不存在,返回 "No such contact"

如果prop 属性不存在,返回 "No such property",

//初始化变量
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
}
];

function lookUp(firstName, prop){
// 请把你的代码写在这条注释以下
for (var i in contacts)
{if (contacts[i].firstName === firstName && prop in contacts[i])
return contacts[i][prop];}
for ( i in contacts)
{ if (prop in contacts[i] ===false)
return "No such property";
}
for ( i in contacts)
{ if (contacts[i].firstName !== firstName)
return "No such contact";}

// 请把你的代码写在这条注释以上
}

// 你可以修改这一行来测试你的代码
lookUp("Akira", "likes");

FCC 基础JavaScript 练习6的更多相关文章

  1. FCC 基础JavaScript 练习7

    1. Math.random()用来生成一个在0(包括0)到1(不包括1)之间的随机小数,因此Math.random()可能返回0但绝不会返回1. 提示随后的函数都会在return执行前调用,所以我们 ...

  2. FCC 基础JavaScript 练习2

    1. 引号不是字符串中唯一的可以被转义字符.下面是常见的转义序列列表: \'  单引号 \" 双引号 \\ 反斜杠符 \n 换行符 \r 回车符 \t 制表符 \b 退格符 \f  换页符 ...

  3. FCC 基础JavaScript 练习1

    1.JavaScript中的注释方式有以下两种 // This is an in-line comment. /* This is a multi-line comment */ 2.avaScrip ...

  4. FCC 基础JavaScript 练习5

    在赌场21点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势,这就叫21点算法. 根据下面的表格,每张卡牌都分配了一个值.如果卡牌的值大于0,那么玩家应该追加赌注.反之,追 ...

  5. FCC 基础JavaScript 练习4

    1.另一种数据类型是布尔(Boolean).布尔 值要么是true要么是false, 它非常像电路开关, true 是“开”,false是“关”.这两种状态是互斥的 2.伪代码 if(条件为真){ 语 ...

  6. FCC 基础JavaScript 练习3

    1.通过使用提供的变量参数:名词myNoun.形容词myAdjective.动词myVerb.副词myAdverb,来创建一个新的句子 result, function wordBlanks(myNo ...

  7. 回归基础: JavaScript 变量提升

    from me: javascript的变量声明具有hoisting机制,它是JavaScript一个基础的知识点,也是一个比较容易犯错的点,平时在开发中,大大小小的项目都会遇到. 它是JavaScr ...

  8. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  9. 基础JavaScript练习(三)总结

    任务目的 实践JavaScript数组.字符串相关操作 任务描述 基于任务四进行升级 将新元素输入框从input改为textarea 允许一次批量输入多个内容,格式可以为数字.中文.英文等,可以通过用 ...

随机推荐

  1. Maven公共仓库/镜像站收集及使用技巧

    查询: 1.http://search.maven.org/ 2.https://mvnrepository.com/ 3.https://maven-repository.com/ 4.(阿里云镜像 ...

  2. STL算法设计理念 - 函数对象和函数对象当參数和返回值

    函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...

  3. android 深入浅出 群内“每日一问” 问答总结

    永远不变的就是变. 俗话说的好,环境改变人生. 常常面对的是一群积极奋进的人,那么你的心态和生活也会变的充满斗志.青春在于折腾,趁我们还年轻,拿出你的激情.踏着泪水载着梦,才干拥有自己的一片天空. 上 ...

  4. 一个有趣的问题:ls -l显示的内容中total究竟是什么?

    当我们在使用ls -l的命令时,我们会看到例如以下类似的信息. 非常多人可能对于第一行的total 12的数值并非非常在意,可是你是否想过,它到底是什么意思? man中的说明,我们能够看出total的 ...

  5. Unix - 文件里构成一个空洞的分析

    lseek函数显示地为一个打开文件设置偏移量,文件偏移量能够大于文件的当前长度,在这样的情况下.对该文件的下一次写将加长该文件.并在文件里构成一个空洞,这一点是同意的. 位于文件里但没有写过的字节都被 ...

  6. html css 仿微信底部自己定义菜单

    近期几个月一直从事微信开发,从刚開始的懵懂渐渐成长了一点. 今天认为微信底部自己定义菜单,假设能在html的页面上也能显示就好了. 记得曾经看过某个网页有类似效果.查找了该网页的css.  ok如今h ...

  7. 李维对VCL理解的几个错误

    研读深入浅出VCL一书的时候,有不少地方被网友提出疑问,而且似乎是网友们正确.但这丝毫不动摇李维在大中华Delphi界的江湖地位,因为高手应该是对整个系统理解的高手,而不是对某一个疑问的高手.能花巨量 ...

  8. 容器HashSet原理(学习)

    一.概述 使用HashMap存储,非线程安全: 二.实现 HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调 ...

  9. 【Android】Android输入子系统【转】

    本文转载自:https://www.cnblogs.com/lcw/p/3506110.html Linux输入子系统回顾 1:为什么要回顾linux输入子系统?这个问题后面自然就知道了 1.linu ...

  10. zoj 3023 Light Bulb

    题目大意: 求L的最大值 思路: 可以想象出是一个关于人到灯泡距离x的单峰上凸函数 当光线在墙角左边的时候影子在不断增长 然后通过相似可以推出人在墙上影子的长度为:H+D*(h-H)/x 再加上地上的 ...