1.21点算法
关键在于case的排列;
2.对象的访问方式:
有两种方式访问对象属性,一个是点操作符(.
),一个是中括号操作符([]
)。
3.第二种访问对象的方式就是中括号操作符([]
),如果你想访问的属性的名称有一个空格,这时你只能使用中括号操作符([]
)。
4.中括号操作符的另一个使用方式是用变量来访问一个属性。当你需要遍历对象的属性列表或查表时,这种方式极为有用。
5.当你创建了一个对象后,你可以用点操作符或中括号操作符来更新对象的属性。
6.你也可以像更改属性一样给对象添加属性。
7.我们同样可以删除对象的属性,例如:delete ourDog.bark;
8.对象和字典一样,可以用来存储键/值对。
如果你的数据跟对象一样,你可以用对象来查找你想要的值,
而不是使用switch或if/else语句。当你知道你的输入数据在某个范围时,这种查找方式极为有效。
9.有时检查一个对象属性是否存在是非常有用的,
我们可以用.hasOwnProperty(propname)
方法来检查对象是否有该属性。
如果有返回true
,反之返回 false
。
检测对象是否存在某个属性,案例:
10.JavaScript Object Notation 简称 JSON
,
它使用JavaScript对象的格式来存储数据。
JSON是灵活的,因为它允许 数据结构 是 字符串,数字,布尔值,字符串,和 对象 的任意组合。
提示:数组中有多个 JSON 对象的时候,对象与对象之间要用逗号隔开。
11.通过串联起来的点操作符或中括号操作符来访问JSON对象的嵌套属性。
12.正如我们在前面的例子所见,JSON对象可以嵌套对象和数组。
与访问嵌套对象一样,用中括号操作符同样可以访问嵌套数组。
13.写一个函数,它有个三个参数,id
、prop
、 value
。
如果 value !=''
而且prop != 'tracks'
,collectionCopy[id][prop]=value;
。
如果 value !=''
而且prop == 'tracks'
,collectionCopy[id][prop].push(value);
。
如果 value == ''
,delete collectionCopy[id][prop];
。
之前一直有问题:
①使用了else if,而不是if结构,判断第一个正确后,不执行下面的else if语句了
②value=“ ”,空格也是一个字符,所以不符合要求,应该是value=“”
③或,且符号记错,| 表示或,& 表示且
14.JavaScript 中最常见的循环就是“for循环
”。for循环中的三个表达式用分号隔开:
for ([初始化]; [条件判断]; [计数器])
初始化
语句只会在执行循环开始之前执行一次。它通常用于定义和设置你的循环变量。
条件判断
语句会在每一轮循环的开始执行,只要条件判断为 true
就会继续执行循环。当条件为 false
的时候,循环将停止执行。这意味着,如果条件在一开始就为 false
,这个循环将不会执行。
计数器
是在每一轮循环结束时执行,通常用于递增或递减。
使用 for
循环把从 1 到 5 添加进 myArray
中。for循环就是if条件语句的进化版。
15.for循环可以按照我们指定的顺序来迭代,通过更改我们的 计数器
,我们可以按照偶数顺序来迭代。
写一个 for
循环,把从1到9的奇数添加到 myArray
。
16.for循环也可以逆向迭代,只要我们定义好合适的条件。
为了能够从后往前两两倒数,我们需要改变我们的 初始化
,条件判断
和 计数器
。
17.迭代输出一个数组的每个元素是 JavaScript 中的常见需求, for
循环可以做到这一点。
声明并初始化一个变量 total
为 0
。使用 for
循环,使得 total
的值为 myArr
的数组中的每个元素的值的总和。
出错地方:total应该是全局变量,我一开始放到了for循环中
18.如果你有一个二维数组,可以使用相同的逻辑,先遍历外面的数组,再遍历里面的子数组。嵌套for循环
一次输出 arr
中的每个子元素。提示,对于内部循环,我们可以通过 arr[i]
的 .length
来获得子数组的长度,因为 arr[i]
的本身就是一个数组。
19.另一种类型的 JavaScript 循环被称为while循环
,因为它规定,当(while)条件为真,循环才会执行,反之不执行。
while循环需要在外部定义循环变量
20.一个例子函数:
函数 lookUp
有两个预定义参数:firstName
值和prop
属性 。
函数将会检查通讯录是否存在一个联系人的firstName
属性等于firstName
值,还会检查对应联系人是否存在 prop
属性。
如果它们都存在,函数返回prop
属性对应的值。
如果firstName
值不存在,返回 "No such contact"
。
如果prop
属性不存在,返回 "No such property"
。
21.计算机的行为只有两种:确定性和随机性。当你一步步地闯关来到这里就是确定行为,当你随意点了个链接就来到这里就是随机行为。
而随机数最适合用来创建这种随机行为。
Math.random()
用来生成一个在0(包括0)到1(不包括1)之间的随机小数,因此Math.random()
可能返回0但绝不会返回1。
22.生成随机小数很棒,但随机数更有用的地方在于生成随机整数。
- 用
Math.random()
生成一个随机小数。 - 把这个随机小数乘以
20
。 - 用
Math.floor()
向下取整 获得它最近的整数。
记住 Math.random()
永远不会返回 1
。同时因为我们是在用 Math.floor()
向下取整,所以最终我们获得的结果不可能有 20
。这确保了我们获得了一个在0到19之间的整数。
把操作连缀起来,代码类似于下面:
Math.floor(Math.random() * 20);
23.我们之前生成的随机数是在0到某个数之间,现在我们要生成的随机数是在两个指定的数之间。
我们需要定义一个最小值和一个最大值。
下面是我们将要使用的方法,仔细看看并尝试理解这行代码到底在干嘛:
Math.floor(Math.random() * (max - min + 1)) + min