//这是一个单行注释
/*** Your output will go here.* Any console.log() -type* statements will appear in* your browser's DevTools* JavaScript console.*/
- 使用
//
来告诉JavaScript来忽略当前行的代码:// This is an in-line comment.
- 你也可以使用多行注释来注释你的代码,以/开始,用/来结束,就像下面这样:
JavaScript
> /* This is a
> multi-line comment */
>- 最佳实践:你应该给你写的代码添加注释,来让你的代码看起来更加地清晰易懂。良好的注释能够清晰地传达你写的代码的意图—对于那些读你的代码的人来说以及未来你看到它的时候,还能理解这段代码的意图。
var myName;
undefined
(未定义),null
(空),boolean
(布尔型),string
(字符串),symbol
(符号),number(数字),
andobject
(对象)。12
和strings
,"12"
和"dog"
, 或"123 cats"
, 都是字母的集合。 计算机能够精确地操作数字, 但是对于字符串却无能为力。var ourName
;Variable
(变量)的名字可以由数字、字母、$
或者_
组成,但是不能包含空格或者以数字为首。var
关键字来创建一个名为myName
的变量。var a = 7;
var b = a;
myVariable = 5;
把Number数字5赋给变量myVariable。=
操作符右边的值都会被赋到左边的变量。 Javascript
> myVar = 5;
> myNum = myVar;
>
数值5
被赋给变量myVar
中, 然后变量myVar
又赋给变量myNum
,这样子myNum
变量中的值也是5
了。
7
赋给变量a
。把变量a
中的内容赋给变量b
。var a = 9;
var myVar = 0;
创建一个名为myVar
的变量并指定一个初始值0
。任务
通过关键字 var 定义一个变量 a 并且给它一个初始值 9。
// 初始化变量
var a = 5;
var b = 10;
var c = "I am a";// 请只修改这条注释以上的代码a = a + 1;
b = b + 5;
c = c + " String!";
undefined
。当你对一个值为undefined
的变量进行运算操作的时候,算出来的结果将会是NaN
,NaN
的意思是”Not a Number”。当你用一个没有定义
的变量来做字符串连接操作的时候,它会如实的输出”undefined”。任务
定义3个变量 a、b、c ,并且分别给他们赋值:5、10、”I am a” ,这样它们就不会是 undefined(未定义的了)。
// 初始化变量
var studlyCapVar;
var properCamelCase;
var titleCaseOver;// 给变量赋值
studlyCapVar = 10;
properCamelCase = "A String";
titleCaseOver = 9000;
MYVAR
与MyVar
和myvar
是截然不同的变量。这就有可能导致多个截然不同的变量却有着有相似的名字。正是由于以上原因所以强烈地建议你, 不要使用这一特性。(以免给自己带来麻烦)驼峰命名法
来书写一个 Javascript 变量,在驼峰命名法
中,变量名的第一个单词的首写字母小写,后面的单词的第一个字母大写。javascript
> var someVariable;
> var anotherVariableName;
> var thisVariableNameIsTooLong;
>
任务
修正声明的变量,让它们的命名符合 驼峰命名法 的规范。
var sum = 10 + 10;
var difference = 45 - 33;
var product = 8 * 10;
var quotient = 66 / 33;
myVar++;
myVar--;
var ourDecimal = 5.7;
var myDecimal = ourDecimal;
var product = 2.0 * 2.5;
var quotient = 4.4 / 2.0;
var remainder = 11 % 3;
a += 12;
b += 9;
c += 7;
a -= 6;
b -= 15;
c -= 1;
a *= 5;
b *= 3;
c *= 10;
a /= 12;
b /= 4;
c /= 11;
function convert(celsius) {fahrenheit = celsius*9/5+32;return fahrenheit;
}
convert(30);
从Celsius摄氏度转换为Fahrenheit华氏度的算法是:摄氏度的温度乘于9除于5,再加上32。
创建一个变量 fahrenheit,然后计算出摄氏度对应的华氏度。
var myFirstName = "Vincente";
var myLastName = "Liang";
var myStr = "I am a "double quoted" string inside "double quotes"";
var myStr = '<a href="" target="_blank">Link</a>';
var myStr = "\ t b r n";
|Code|Output|
|:—:|:—:|
|'
|单引号|
|"
|双引号|
|\
|反斜杠符|
|n
|换行符|
|r
|回车符|
|t
|制表符|
|b
|退格符|
|f
|换页符|
注意:如果你想要显示一个反斜杠就必须要转义它。
myStr
。var myStr = "This is the start. " + "This is the end.";
var myStr = "This is the first sentence. ";
myStr += "This is the second sentence."
var myName = "Vincente";
var myStr = "My name is " + myName + "and am swell!"
var someAdjective = "cool";
var myStr = "Learning to code is ";
myStr += someAdjective;
var lastNameLength = 0;
var lastName = "Lovelace";
lastNameLength = lastName.length;
.length
来获得字符串变量字符串
值的长度: "Alan Peter".length; // 10
firstLetterOfLastName = lastName[0]
[索引]
来获得对应的字符。基于零
的索引。var firstName = "Charles"
中,你可以使用firstName[0]
来获得第一个位置上的字符。lastName
中的第一个字符,并赋给变量firstLetterOfLastName
。var myStr = "Jello World";
myStr = "Hello World";
字符串
的值是不可变的
,这意味着一旦字符串被创建就不能被改变。javascript
> var myStr = "Bob";
> myStr[0] = "J";
>
是不会把变量myStr
的值改变成"Job"
的,因为变量myStr
是不可变的。
注意,这 并不 意味着myStr
永远不能被改变,只是字符串字面量string literal
的各个字符不能被改变。改变myStr
中的唯一方法是重新给它赋一个值,就像这样:
javascript
> var myStr = "Bob";
> myStr = "Job";
>
myStr
的值改为Hello World
。var thirdLetterOfLastName = lastName[2];
var lastLetterOfLastName = lastName[lastName.length - 1];
var secondToLastLetterOfLastName = lastName[lastName.length - 2];
function wordBlanks(myNoun, myAdjective, myVerb, myAdverb) {var result = myNoun + " " + myVerb + " " + myAdjective + " things " + myAdverb + ".";return result;
}
wordBlanks("I", "great", "do", "easily");
myNoun
、形容词myAdjective
、动词myVerb
、副词myAdverb
,来创建一个新的句子result
。var myArray = ["Vincente",20];
数组
,我们可以在一个地方存储多个数据。你以左方括号[
开始定义一个数组,以右方括号]
结束定义,并把每个条目之间用逗号隔开,就像这样:var sandwich = ["peanut butter", "jelly", "bread"]
。
[x] 任务: 创建一个包含字符串
和数字
的数组myArray
。
var myArray = [[1,2],[3,4]];
[["Bulls", 23], ["White Sox", 45]]
。这被称为一个多维数组
。myArray
的多维数组。var myArray = [1,2,3];
var myData = myArray[0];
[index]
来访问数组中的数据。var myArray = [1,2,3];
myArray[0] = 3;
var myArray = [[1,2,3], [4,5,6], [7,8,9], [[10,11,12], 13, 14]];
var myData = myArray[2][1];
var myArray = [["John", 23], ["cat", 2]];
myArray.push(["dog",3]);
push()
函数。.push()
接受把一个或多个参数,并把它“推”入到数组的末尾: javascript
> var arr = [1,2,3];
> arr.push(4);
> // 现在arr的值为 [1,2,3,4]
>
["dog", 3]
“推”入到myArray
变量的末尾。var removedFromMyArray = myArray.pop();
.pop()
函数。.pop()
函数用来“抛出”一个数组末尾的值。我们可以把这个“抛出”的值赋给一个变量存储起来。var oneDown = [1, 4, 6].pop();
现在oneDown
的值为6
,数组变成了[1, 4]
。.pop()
函数移除myArray
中的最后一条,并且把“抛出”的值赋给removedFromMyArray
。var removedFromMyArray = myArray.shift();
pop()
函数用来移出数组中最后一个元素。如果想要移出第一个元素要怎么办呢?.shift()
的用武之地。它的工作原理就像.pop()
,但它移除的是第一个元素,而不是最后一个。.shift()
函数移出myArray
中的第一项,并把“移出”的值赋给removedFromMyArray
。myArray.unshift(["Paul",35]);
shift
(移出)数组中的第一个元素,你也可以unshift
(移入)一个元素到数组的头部。.unshift()
函数用起来就像.push()
函数一样, 但不是在数组的末尾添加元素,而是在数组的头部添加元素。unshift()
函数把["Paul",35]
加入到myArray
的头部。var myList = [["1",1],["2",2],["3",3],["4",4],["5",5]];
myList
的购物清单,清单的数据格式就是多维数组。["Chocolate Bar", 15]
function myFunction() {console.log("Hi World");
}
myFunction();
函数
(functions)中。
javascript
> function functionName() {
> console.log("Hello World");
> }
>
functionName
加上后面的小括号来调用这个函数(function),就像这样:functionName();
每次调用函数时它会打印出消息的“Hello World”到开发的控制台上。所有的大括号之间的代码将在每次函数调用时执行。
[x] 任务:
- 创建一个名为
myFunction
的函数,这个函数可以打印“Hi World”到开发控制台上。- 调用这个函数。
function myFunction(a,b) {console.out(a+b);
}
myFunction(1,1);
parameters
在函数中充当占位符(也叫形参)的作用,参数可以为一个或多个。调用一个函数时所传入的参数为实参,实参决定着形参真正的值。简单理解:形参即形式、实参即内容。param1
和param2
: javascript
> function testFun(param1, param2) {
> console.log(param1, param2);
> }
>
接着我们调用testFun
:
javascript
> testFun("Hello", "World");
>
我们传递了两个参数,"Hello"
和"World"
。在函数内部,param1
等于“Hello”
,param2
等于“World”
。请注意,testFun
函数可以多次调用,每次调用时传递的参数会决定形参的实际值。
myFunction
的函数,它可以接收两个参数,计算参数的和,将结果输出到控制台。 var myGlobal = 10;
function fun1() {oopsGlobal = 5;
}
function fun2() {var output = "";if (typeof myGlobal != "undefined") {output += "myGlobal: " + myGlobal;}if (typeof oopsGlobal != "undefined") {output += " oopsGlobal: " + oopsGlobal;}console.log(output);
}
作用域
涉及到变量的作用范围。在函数外定义的变量具有全局
作用域。这意味着,具有全局作用域的变量可以在代码的任何地方被调用。var
关键字定义的变量,会被自动创建在全局作用域中,形成全局变量。当在代码其他地方无意间定义了一个变量,刚好变量名与全局变量相同,这时会产生意想不到的后果。因此你应该总是使用var关键字来声明你的变量。
- 在函数外声明一个
全局
变量myGlobal
,并给它一个初始值10
- 在函数
fun1
的内部,不使用var
关键字来声明oopsGlobal
,并赋值为5
。- [ ] 错误:在函数外用
var
声明也为全局变量。
function myFunction() {
'use strict';var myVar;console.log(myVar);
}
myFunction()
myTest
内声明局部变量loc
的最佳例子: javascript
> function myTest() {
> var loc = "foo";
> console.log(loc);
> }
> myTest(); // "foo"
> console.log(loc); // "undefined"
>
在函数外,loc
是未定义的。
var outerWear = "T-Shirt";
function myFunction() {var outerWear = "sweater";return outerWear;
}
局部
变量和全局
变量。在这种情况下,局部
变量将会优先于全局
变量。javascript
> var someVar = "Hat";
> function myFun() {
> var someVar = "Head";
> return someVar;
> }
>
函数myFun
将会返回"Head"
,因为局部变量
优先级更高。
myFunction
添加一个局部变量来覆盖outerWear
的值为"sweater"
。var
。function timesFive(num) {return 5*num;
参数
来传入函数,也可以使用return
语句把数据从一个函数中传出来。var processed = 0;
function process(num) {return (num + 3) / 5;
}
function queue(arr, item) {arr.push(item);item = arr.shift();
return item;
}
队列
(queue)是一个抽象的数据结构,队列中的条目都是有秩序的。新的条目会被加到队列
的末尾,旧的条目会从队列
的头部被移出。写一个函数queue
,用一个数组arr
和一个数字item
作为参数。数字item
添加到数组的结尾,然后移出数组的第一个元素,最后队列函数应该返回被删除的元素。
function welcomeToBooleans() {return true;
布尔
值要么是true
要么是false
。它非常像电路开关,true
是“开”,false
是“关”。这两种状态是互斥的。Boolean
值绝不会写作被引号包裹起来的形式。字符串
的"true"
和"false"
不是布尔
值,在 JavaScript 中也没有特殊含义。function myFunction(wasThatTrue) {if(wasThatTrue)return "That was true";return "That was false";
}
if
告诉 JavaScript 在小括号中的条件为真的情况下去执行定义在大括号里面的代码。这种条件被称为Boolean
条件,因为他们只可能是true
(真)或false
(假)。function myTest(val) {if (val == 12) {return "Equal";}return "Not Equal";
}
相互比较
的操作。所有这些操作符都返回一个true
或false
值。function myTest(val) {if (val === 7) {return "Equal";}return "Not Equal";
}
===
)是相对于相等操作符(==
)的一种操作符。与相等操作符不同的是,它会同时比较元素的值
和数据类型
。
function myTest(val) {if (val != 99) { // 请修改这一行return "Not Equal";}return "Equal";
}
例如
1 != 2 // true
1 != “1” // false
1 != ‘1’ // false
1 != true // false
0 != false // false –>
- [x] 任务: 在if
语句中,添加不相等运算符!=
,这样函数在当val
不等于99
的时候,会返回"Not Equal"
。
function myTest(val) {if (val !== 17) {return "Not Equal";}return "Equal";
}
!==
)与全等运算符是相反的。这意味着严格不相等并返回false
的地方,用严格相等运算符会返回true
,反之亦然。严格相等运算符不会转换值的数据类型。function myTest(val) {if (val > 100) {return "Over 100";}if (val > 10) {return "Over 10";}return "10 or Under";
}
function myTest(val) {if (val >= 20) {return "20 or Over";}if (val >= 10) {return "10 or Over";}return "9 or Under";
}
function myTest(val) {if (val < 25) {return "Under 25";}if (val < 55) {return "Under 55";}return "55 or Over";
}
function myTest(val) {if (val <= 22) {return "Smaller Than or Equal to 12";}if (val <= 24) {return "Smaller Than or Equal to 24";}return "25 or More";
}
function myTest(val) {if (val <= 50 && val >= 25) {return "Yes";}return "No";
}
function myTest(val) {if (val < 10 || val > 20) {return "Outside";}return "Inside";
}
function myTest(val) {var result = "";if (val > 5) {result = "Bigger than 5";}else {result = "5 or Smaller";}return result;
}
function myTest(val) {if (val > 10) {return "Greater than 10";}else if (val < 5) {return "Smaller than 5";}elsereturn "Between 5 and 10";
}
function myTest(val) {if (val < 5) {return "Less than 5";} else if (val < 10) {return "Less than 10";} else {return "Greater than or equal to 10";}
}
第一个例子:
javascript
> function foo(x) {
> if (x < 1) {
> return "Less than one";
> } else if (x < 2) {
> return "Less than two";
> } else {
> return "Greater than or equal to two";
> }
> }
>
第二个例子更改了代码的执行顺序:
javascript
> function bar(x) {
> if (x < 2) {
> return "Less than two";
> } else if (x < 1) {
> return "Less than one";
> } else {
> return "Greater than or equal to two";
> }
> }
>
这两个函数看起来几乎一模一样,我们传一个值进去看看它们有什么区别。
javascript
> foo(0) // "Less than one"
> bar(0) // "Less than two"
>
function myTest(num) {if(num < 5)return "Tiny";else if(num < 10)return "Small";else if(num < 15)return "Medium";else if(num < 20)return "Large";elsereturn "Huge";
}
if/else
语句串联在一起可以实现复杂的逻辑,这是多个if/else if
语句串联在一起的伪代码: javascript
> if (condition1) {
> statement1
> } else if (condition2) {
> statement2
> } else if (condition3) {
> statement3
> . . .
> } else {
> statementN
> }
>
if/else if
语句串联起来实现下面的逻辑: javascript
> num < 5 - return "Tiny"
> num < 10 - return "Small"
> num < 15 - return "Medium"
> num < 20 - return "Large"
> num >= 20 - return "Huge"
>
function golfScore(par, strokes) {if(strokes == 1)return "Hole-in-one!";else if(strokes <= par - 2)return "Eagle";else if(strokes == par - 1)return "Birdie";else if(strokes == par)return "Par";else if(strokes == par + 1)return "Bogey";else if(strokes == par + 2)return "Double Bogey";else if(strokes >= par + 3)return "Go Home!";
}
golf
游戏中,每个洞都有自己的标准杆数par
,代表着距离。根据你把球打进洞所挥杆的次数strokes
,可以计算出你的高尔夫水平。par
和挥杆次数strokes
,根据下面的表格返回正确的水平段位。 |Strokes|Return|
|:—:|:—:|
|1|”Hole-in-one!”|
|<= par - 2|”Eagle”|
|par - 1|”Birdie”|
|par|”Par”|
|par + 1|”Bogey”|
|par + 2|”Double Bogey”|
|>= par + 3|”Go Home!”|
==
而不是=
!function myTest(val) {var answer = "";switch(val) {case 1:answer = "alpha";break;case 2:answer = "beta";break;case 3:answer = "gamma";break;case 4:answer = "delta";break;}return answer;
}
switch
语句。根据不同的参数值会匹配上不同的case
分支,语句会从第一个匹配的case
分支开始执行,直到碰到break
就结束。 javascript
> switch (num) {
> case value1:
> statement1;
> break;
> case value2:
> statement2;
> break;
> ...
> case valueN:
> statementN;
> break;
> }
>
case
值使用严格相等运算符进行比较,break
关键字告诉javascript停止执行语句。如果没有break
关键字,下一个语句会继续执行。val
的switch
语句,并且根据下面的条件来设置不同的answer
: 1
- “alpha” 2
- “beta” 3
- “gamma” 4
- “delta”function myTest(val) {var answer = "";switch(val) {case "a":answer = "apple";break;case "b":answer = "bird";break;case "c":answer = "cat";break;default:answer = "stuff";break;}return answer;
}
switch
语句中你可能无法用case
来指定所有情况,这时你可以添加default
语句。当再也找不到case
匹配的时候default
语句会执行,非常类似于if/else
组合中的else
语句。default
语句应该是最后一个case
。function myTest(val) {var answer = "";switch(val) {case 1:case 2:case 3:answer = "Low";break;case 4:case 5:case 6:answer = "Mid";break;case 7:case 8:case 9:answer = "High";break;default:answer = "4 alone";
}
switch
语句中的case
分支的break
语句漏掉了,后面的case
语句会一直执行直到遇到break
。function myTest(val) {var answer = "";switch (val) {case 1:answer = "There is no #1";break;case 7:answer = "Ate Nine";break;case 42:answer = "The Answer";break;case 99:answer = "Missed me by this much!";break;case "bob":answer = "Marley";
}
switch
语句写起来会比多个串联的if/if else
语句容易些.function isLess(a, b) {return a < b;
}
boolean
值,要么是true
要么是false
。if/else
语句来做比较然后返回true
或false
已经成为大家的共识: JavaScript
> function isEqual(a,b) {
> if (a === b) {
> return true;
> } else {
> return false;
> }
> }
>
因为===
总是返回true
或false
,所以我们可以直接返回比较的结果:
JavaScript
> function isEqual(a,b) {
> return a === b;
> }
>
isLess
函数的if/else
语句但不影响函数的功能。// 定义 abTest
function abTest(a, b) {if(a < 0 || b < 0)return;und(Math.pow(Math.sqrt(a) + Math.sqrt(b), 2));
}
return
语句时,函数返回一个结果就结束运行了,return
后面的语句根本不会执行。var count = 0;
function cc(card) {var action;switch(card) {case 2:case 3:case 4:case 5:case 6:count += 1;break;case 10:case "J":case "Q":case "K":case "A":count -= 1;break;}if(count > 0)action = " Bet";if(count <= 0)action = " Hold";return count+action;
}
var myDog = {"name": "Dog","legs": 4,"tails": 1,"friends": ["cat","bird"]
};
object
。 JavaScript
> var cat = {
> "name": "Whiskers",
> "legs": 4,
> "tails": 1,
> "enemies": ["Water", "Dogs"]
> };
>
myDog
的对象,它里面有这些属性: 名称"name"
、 腿"legs"
、尾巴"tails"
、朋友"friends"
。你可以设置对象属性为任何你想要的值,只要"name"
是字符串、"legs"
和"tails"
是数字、"friends"
是数组。var testObj = {"hat": "ballcap","shirt": "jersey","shoes": "cleats"
};
var hatValue = testObj.hat;
var shirtValue = testObj.shirt;
.
),一个是中括号操作符([]
)。 JavaScript
> var myObj = {
> prop1: "val1",
> prop2: "val2"
>};
> var prop1val = myObj.prop1; // val1
> var prop2val = myObj.prop2; // val2
>
testObj
,把hat
的属性值赋给变量hatValue
,把shirt
的属性值赋给shirtValue
。var testObj = {"an entree": "hamburger","my side": "veggies","the drink": "water"
};
var entreeValue = testObj["an entree"];
var drinkValue = testObj["the drink"];
[]
),如果你想访问的属性的名称有一个空格,这时你只能使用中括号操作符([]
)。[]
)读取对象属性的例子: JavaScript
> var myObj = {
> "Space Name": "Kirk",
> "More Space": "Spock"
> };
> myObj["Space Name"]; // Kirk
> myObj['More Space']; // Spock
>
testObj
的属性"an entree"
值和属性"the drink"
值。""
。var testObj = {12: "Namath",16: "Montana",19: "Unitas"
};
var playerNumber = 16;
var player = testObj[playerNumber];
JavaScript
> var someProp = "propName";
> var myObj = {
> propName: "Some Value"
> }
> myObj[someProp]; // "Some Value"
>
还有更多:
JavaScript
> var myDog = "Hunter";
> var dogs = {
> Fido: "Mutt",
> Hunter: "Doberman",
> Snoopie: "Beagle"
> };
> var breed = dogs[myDog];
> console.log(breed)// "Doberman"
>
playerNumber
,通过中括号操作符找到testObj
中playerNumber 为 16 的值。var myDog = {"name": "Coder","legs": 4,"tails": 1,"friends": ["Free Code Camp Campers"]
};
myDog.name = "Happy Coder";
JavaScript
> var ourDog = {
> "name": "Camper",
> "legs": 4,
> "tails": 1,
> "friends": ["everything!"]
> };
>
让我们更改它的名称为"Happy Camper"
,这有两种方式来更新对象的name
属性:
JavaScript
> ourDog.name = "Happy Camper";
> ourDog["name"] = "Happy Camper";
>
myDog
对象的name
属性,让它的名字从"Coder"
变成"Happy Coder"
。myDog.bark = "wang";
ourDog.bark = "bow-wow";
或者ourDog["bark"] = "bow-wow";
myDog
添加一个"bark"
属性,设置它的值为狗的声音,例如:"woof"
。delete myDog.tails;
delete ourDog.bark;
myDog
对象的"tails"
属性。function phoneticLookup(val) {var lookup = {alpha: "Adams",bravo: "Boston",charlie: "Chicago",delta: "Denver",echo: "Easy",foxtrot: "Frank"};return lookup[val];
}
JavaScript
> var alpha = {
> 1:"Z",
> 2:"Y",
> 3:"X",
> 4:"W",
> ...
> 24:"C",
> 25:"B",
> 26:"A"
> };
> alpha[2]; // "Y"
> alpha[24]; // "C"
>
> var value = 2;
> alpha[value]; // "Y"
>
switch
语句转化为一个叫做lookup
的对象。=
,""
var myObj = {gift: "pony",pet: "kitten",bed: "sleigh"
};
function checkObj(checkProp) {if(myObj.hasOwnProperty(checkProp))return myObj[checkProp];elsereturn "Not Found";
}
.hasOwnProperty(propname)
方法来检查对象是否有该属性。如果有返回true
,反之返回false
。 JavaScript
> var myObj = {
> top: "hat",
> bottom: "pants"
> };
> myObj.hasOwnProperty("top"); // true
> myObj.hasOwnProperty("middle"); // false
>
checkObj
检查myObj
是否有checkProp
属性,如果属性存在,返回属性对应的值,如果不存在,返回"Not Found"
。checkProp
不加双引号。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" ]}
];
JSON
,它使用JavaScript对象的格式来存储数据。JSON是灵活的,因为它允许数据结构
是字符串
,数字
,布尔值
,字符串
和对象
的任意组合。JavaScript
> var ourMusic = [
> {
> "artist": "Daft Punk",
> "title": "Homework",
> "release_year": 1997,
> "formats": [
> "CD",
> "Cassette",
> "LP" ],
> "gold": true
> }
> ];
>
这是一个对象数组,并且对象有各种关于专辑的详细信息
。它也有一个嵌套的formats
的数组。附加专辑记录可以被添加到数组的最上层。
myMusic
的JSON对象。添加artist
和title
字符串,release_year
数字和formats
字符串数组。var myStorage = {"car": {"inside": {"glove box": "maps","passenger seat": "crumbs"},"outside": {"trunk": "jack"}}
};
var gloveBoxContents = myStorage.car.inside["glove box"];
JavaScript
> var ourStorage = {
> "desk": {
> "drawer": "stapler"
> },
> "cabinet": {
> "top drawer": {
> "folder1": "a file",
> "folder2": "secrets"
> },
> "bottom drawer": "soda"
> }
> }
> ourStorage.cabinet["top drawer"].folder2; // "secrets"
> ourStorage.desk.drawer; // "stapler"
>
myStorage
中嵌套属性glove box
的值。因为属性的名字带有空格,请使用中括号操作符来访问属性的值。var myPlants = [{type: "flowers",list: ["rose","tulip","dandelion"]},{type: "trees",list: ["fir","pine","birch"]}
];
var secondTree = myPlants[1].list[1];
JavaScript
> var ourPets = {
> "cats": [
> "Meowzer",
> "Fluffy",
> "Kit-Cat"
> ],
> "dogs": [
> "Spot",
> "Bowser",
> "Frankie"
> ]
> };
> ourPets.cats[1]; // "Fluffy"
> ourPets.dogs[0]; // "Spot"
>
myPlants
的第二棵树。0
开始,对象也不例外。// 初始化变量
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;if(value !== '' && prop == 'tracks')collectionCopy[id][prop].push(value);if(value === '')delete collectionCopy[id][prop];return collection;
}
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 myArray = [];
for (var i = 1; i <= 5; i++) {myArray.push(i);
}
for
循环”。var myArray = [];
for (var i = 1; i < 10; i += 2) {myArray.push(i);
}
for
循环可以按照我们指定的顺序来迭代,通过更改我们的计数器,我们可以按照偶数顺序来迭代。var myArray = [];
for (var i = 9; i > 0; i -= 2) {myArray.push(i);
}
for
循环也可以逆向迭代,只要我们定义好合适的条件。var myArr = [ 2, 3, 4, 5, 6];
var total = 0;
for (var i = 0; i <= ourArr.length; i++) {total += myArr[i];
}
for
循环可以做到这一点。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]]);
- [X] 任务: 修改函数multiplyAll
,获得arr
内部数组的每个数字相乘的结果product
。
var myArray = [];
var i = 0;
while(i < 5) {myArray.push(i);i++;
}
while
循环,因为它规定,当(while
)条件为真,循环才会执行,反之不执行。
- [X] 任务: 通过一个while
循环,把从0
到4
的值添加到myArray
中。
function lookUp(firstName, prop){var i = 0;for (i=0;i<=3;i++){if(contacts[i].firstName == firstName)break;}if(i==4)return "No such contact";else if(contacts[i].hasOwnProperty(prop))return contacts[i][prop];elsereturn "No such property";
}
lookUp
有两个预定义参数:firstName
值和prop
属性 。firstName
相同的联系人。如果存在,那么还需要检查对应的联系人中是否存在prop
属性。prop
属性对应的值。firstName
值不存在,返回"No such contact"
。prop
属性不存在,返回"No such property"
。function myFunction() {return Math.random();
}
Math.random()
用来生成一个在0(包括0)到1(不包括1)之间的随机小数,因此Math.random()
可能返回0但绝不会返回1。return
执行前调用,所以我们可以直接返回Math.random()
的值。myFunction
来生成一个随机数取代0
。function myFunction() {return Math.floor(10*Math.random());
}
- 用
Math.random()
生成一个随机小数。- 把这个随机小数乘以
20
。- 用
Math.floor()
向下取整 获得它最近的整数。- 记住
Math.random()
永远不会返回1
。同时因为我们是在用Math.floor()
向下取整,所以最终我们获得的结果不可能有20
。这确保了我们获得了一个在0到19之间的整数。
function randomRange(myMin, myMax) {return Math.floor(Math.random() * (myMax -myMin + 1)) + myMin;
}
Math.floor(Math.random() * (max - min + 1)) + min
var testString = "Ada Lovelace and Charles Babbage designed the first computer and the software that would have run on it.";
var expression = /and/gi;
var andCount = testString.match(expression).length;
Regular expressions
正则表达式被用来根据某种匹配模式来寻找strings中的某些单词。The dog chased the cat
中单词the
,我们可以使用下面的正则表达式: /the/gi
/
是这个正则表达式的头部the
是我们想要匹配的模式/
是这个正则表达式的尾部g
代表着global
(全局),意味着返回所有的匹配而不仅仅是第一个。i
代表着忽略大小写,意思是当我们寻找匹配的字符串的时候忽略掉字母的大小写。- [X] 任务: 用全局、忽略大小写的模式选取字符串 testString中所有的单词 and。
var testString = "There are 3 cats but 4 dogs.";
var expression = /d+/g;
var digitCount = testString.match(expression).length;
d
,意思是被用来获取一个字符串的数字。/d/g
。+
),例如:/d+/g
,它允许这个正则表达式匹配一个或更多数字。g
是’global’的简写,意思是允许这个正则表达式 找到所有的匹配而不是仅仅找到第一个匹配。d
选择器来选取字符串中的所有数字。var testString = "How many spaces are there in this sentence?";
var expression = /s+/g;
var spaceCount = testString.match(expression).length;
s
来选择一个字符串中的空白。" "
(空格符)、r
(回车符)、n
(换行符)、t
(制表符) 和 f
(换页符)。/s+/g
var testString = "How many non-space characters are there in this sentence?";
var expression = /S/g;
var nonSpaceCount = testString.match(expression).length;
s
匹配任何空白字符,S
匹配任何非空白字符。/S/g
来匹配字符串testString
中的所有非空白字符。<script>function runSlots() {var slotOne;var slotTwo;var slotThree;slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;slotThree = Math.floor(Math.random() * (3 - 1 + 1)) + 1;}
</style>
slotOne
、slotTwo
、slotThree
来存储着3个随机数。Math.floor(Math.random() * (3 - 1 + 1)) + 1;
if (slotOne === slotTwo && slotTwo === slotThree){return slotOne;} else {return null;}
null
。null
是JavaScript中的一种数据类型,意味着空。if statement
,用多个条件按顺序来检查它们是否相等。类似于: javascript
> if (slotOne === slotTwo && slotTwo === slotThree){
> return slotOne;
> } else {
> }
>
"It's A Win"
追加到class logger
的html中。 $($(".slot")[0]).html(slotOne);$($(".slot")[1]).html(slotTwo);$($(".slot")[2]).html(slotThree);
$(".slot")
获得所有老虎机。$($(".slot")[0]).html(slotOne);
<script>function runSlots() {var slotOne;var slotTwo;var slotThree;var images = ["//i.imgur/9H17QFk.png", "//i.imgur/9RmpXTy.png", "//i.imgur/VJnmtt5.png"];slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;slotThree = Math.floor(Math.random() * (3 - 1 + 1)) + 1;$($('.slot')[0]).html('<img src = "' + images[slotOne-1] + '">');$($('.slot')[1]).html('<img src = "' + images[slotTwo-1] + '">');$($('.slot')[2]).html('<img src = "' + images[slotThree-1] + '">');if (slotOne === slotTwo && slotTwo === slotThree) {$('.logger').html("It's A Win");return null;}if (slotOne !== undefined && slotTwo !== undefined && slotThree !== undefined){$(".logger").html(slotOne + " " + slotTwo + " " + slotThree);}$('.logger').append(" Not A Win");return [slotOne, slotTwo, slotThree];}$(document).ready(function() {$('.go').click(function() {runSlots();});});
</script><div><div class = 'container inset'><div class = 'header inset'><img src='/images/freecodecamp_logo.svg' alt='learn to code JavaScript at Free Code Camp logo' class='img-responsive nav-logo'><h2>FCC Slot Machine</h2></div><div class = 'slots inset'><div class = 'slot inset'></div><div class = 'slot inset'></div><div class = 'slot inset'></div></div><br/><div class = 'outset'><button class = 'go inset'>Go</button></div><br/><div class = 'foot inset'><span class = 'logger'></span></div></div>
</div><style>.slot > img {margin: 0!important;height: 71px;width: 50px;}.container {background-color: #4a2b0f;height: 400px;width: 260px;margin: 50px auto;border-radius: 4px;}.header {border: 2px solid #fff;border-radius: 4px;height: 55px;margin: 14px auto;background-color: #457f86}.header h2 {height: 30px;margin: auto;}.header h2 {font-size: 14px;margin: 0 0;padding: 0;color: #fff;text-align: center;}.slots{display: flex;background-color: #457f86;border-radius: 6px;border: 2px solid #fff;}.slot{flex: 1 0 auto;background: white;height: 75px;width: 50px;margin: 8px;border: 2px solid #215f1e;border-radius: 4px;text-align: center;}.go {width: 100%;color: #fff;background-color: #457f86;border: 2px solid #fff;border-radius: 2px;box-sizing: none;outline: none!important;}.foot {height: 150px;background-color: 457f86;border: 2px solid #fff;}.logger {color: white;margin: 10px;}.outset {-webkit-box-shadow: 0px 0px 15px -2px rgba(0,0,0,0.75);-moz-box-shadow: 0px 0px 15px -2px rgba(0,0,0,0.75);box-shadow: 0px 0px 15px -2px rgba(0,0,0,0.75);}.inset {-webkit-box-shadow: inset 0px 0px 15px -2px rgba(0,0,0,0.75);-moz-box-shadow: inset 0px 0px 15px -2px rgba(0,0,0,0.75);box-shadow: inset 0px 0px 15px -2px rgba(0,0,0,0.75);}
</style>
images
,我们可以通过不同的索引来获取每个图片。$($('.slot')[0]).html('<img src = "' + images[slotOne-1] + '">');
注:资料整理自FCC中文站
本文发布于:2024-02-03 06:07:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170691165249136.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |