FCC 基础JavaScript 练习6
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
,通过中括号操作符找到 testObj
中 playerNumber
为 16
的值
// 初始化变量
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标识,并具有多种属性。但并非所有的专辑都有完整的信息。
写一个函数,它有个三个参数,id
、prop
、 value
。
如果 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,
任务
声明并初始化一个变量 total
为 0
。使用 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的更多相关文章
- FCC 基础JavaScript 练习7
1. Math.random()用来生成一个在0(包括0)到1(不包括1)之间的随机小数,因此Math.random()可能返回0但绝不会返回1. 提示随后的函数都会在return执行前调用,所以我们 ...
- FCC 基础JavaScript 练习2
1. 引号不是字符串中唯一的可以被转义字符.下面是常见的转义序列列表: \' 单引号 \" 双引号 \\ 反斜杠符 \n 换行符 \r 回车符 \t 制表符 \b 退格符 \f 换页符 ...
- FCC 基础JavaScript 练习1
1.JavaScript中的注释方式有以下两种 // This is an in-line comment. /* This is a multi-line comment */ 2.avaScrip ...
- FCC 基础JavaScript 练习5
在赌场21点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势,这就叫21点算法. 根据下面的表格,每张卡牌都分配了一个值.如果卡牌的值大于0,那么玩家应该追加赌注.反之,追 ...
- FCC 基础JavaScript 练习4
1.另一种数据类型是布尔(Boolean).布尔 值要么是true要么是false, 它非常像电路开关, true 是“开”,false是“关”.这两种状态是互斥的 2.伪代码 if(条件为真){ 语 ...
- FCC 基础JavaScript 练习3
1.通过使用提供的变量参数:名词myNoun.形容词myAdjective.动词myVerb.副词myAdverb,来创建一个新的句子 result, function wordBlanks(myNo ...
- 回归基础: JavaScript 变量提升
from me: javascript的变量声明具有hoisting机制,它是JavaScript一个基础的知识点,也是一个比较容易犯错的点,平时在开发中,大大小小的项目都会遇到. 它是JavaScr ...
- js基础--javaScript数据类型你都弄明白了吗?绝对干货
欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...
- 基础JavaScript练习(三)总结
任务目的 实践JavaScript数组.字符串相关操作 任务描述 基于任务四进行升级 将新元素输入框从input改为textarea 允许一次批量输入多个内容,格式可以为数字.中文.英文等,可以通过用 ...
随机推荐
- Ubuntu 16.04下操作iptables的技巧(解决Failed to start iptables.service: Unit iptables.service not found.或者/etc/init.d/iptables: 没有那个文件或目录)
/etc/init.d/iptables网上的解法应该都是基于CentOS 6去实践,而在CentOS 7中又被firewalld给取代,所以操作上的写法基本会改变,但是底层iptables则不会改变 ...
- Eclipse配色方案插件 真漂亮!
原文:https://my.oschina.net/jean/blog/208263 最近发现了一个Eclipse配色方案插件,这回给Eclipse配色太方便了. 插件主页:http://eclips ...
- elk实时日志分析平台部署搭建详细实现过程
原文:http://blog.csdn.net/mchdba/article/details/52132663 1.ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:以下内容 ...
- java MAT 分析
java MAT 分析 http://blog.csdn.net/qeqeqe236/article/details/43577857 https://www.cnblogs.com/AloneSwo ...
- mac中apache+mysql+php+phpMyAdmin配置备忘
Mac OS X 内置Apache 和 PHP,使用起来非常方便.本文以Mac OS X 10.6.3和为例.主要内容包括: 启动Apache 运行PHP 安装MySQL 使用phpMyAdmin 配 ...
- 开发人员调试工具Chrome Workspace
Workspace是个什么样的东西呢?他可以在开发人员工具中调试改动js或者css同一时候自己主动保存文件.可以避免开发人员在工具中调试好,再到编辑器中改动一次代码的反复操作,可以提高一定的效率 配置 ...
- 2014阿里巴巴WEB前端实习生在线笔试题
2014年3月31日晚,我怀着稍微忐忑的心情(第一次在线笔试^_^!!)进行了笔试.阿里巴巴的笔试题共同拥有10道,差点儿包括了Web前端开发的各个方面,有程序题.有叙述题.时间很紧张,仅仅完毕了大概 ...
- Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip 树形压位DP
题目链接:http://codeforces.com/contest/766/problem/E Examples input 3 1 2 3 1 2 2 3 out 10 题意: 给你一棵n个点 ...
- 【bzoj3609】[Heoi2014]人人尽说江南好
可以算出合并多少次. #include<algorithm> #include<iostream> #include<cstdlib> #include<cs ...
- JavaScript总结01
1 JavaScript 与 Java 的关系? 雷锋和雷峰塔的关系JavaScript和Java都与sun公司有合作,是借势Java 2 JavaScript 的特点是什么? 脚本语言(一种轻量级的 ...