1.
JavaScript提供七种不同的data types(数据类型),它们是undefined
(未定义), null
(空), boolean
(布尔型), string
(字符串), symbol
(符号), number
(数字), and object
(对象)。
Variable
(变量)的名字可以由数字、字母、$
或者 _
组成,但是不能包含空格或者以数字为首。
2.
当你定义一个字符串必须要用单引号或双引号来包裹它。那么当你需要在字符串中使用一个: "
或者 '
时该怎么办呢?
在 JavaScript 中,你可以通过在引号前面使用 反斜杠(\
) 来转义引号。
var sampleStr = "Alan said, \"Peter is learning JavaScript\".";
这标志着提醒 JavaScript 单引号或双引号并不是字符串的结尾,而是出现在字符串内的字符。所以,如果你要打印字符串到控制台,你将得到:
Alan said, "Peter is learning JavaScript".
3.
字符串中的转义序列
引号不是字符串中唯一的可以被转义字符。下面是常见的转义序列列表:
Code | Output |
---|---|
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\b | 退格符 |
\f | 换页符 |
注意,如果你想要显示一个反斜杠就必须要转义它。
4.
一个简单的方法将数据追加到一个数组的末尾是通过 push()
函数。
.push()
接受把一个或多个参数,并把它“推”入到数组的末尾。
var arr = [1,2,3];
arr.push(4);
// 现在arr的值为 [1,2,3,4]
5.
.pop()
函数用来“抛出”一个数组末尾的值。我们可以把这个“抛出”的值赋给一个变量存储起来。
数组中任何类型的条目(数值,字符串,甚至是数组)可以被“抛出来” 。
举个例子, 对于这段代码var oneDown = [1, 4, 6].pop();
现在 oneDown
的值为 6
,数组变成了 [1, 4]
。
6.
这就是 .shift()
的用武之地。它的工作原理就像 .pop()
,但它移除的是第一个元素,而不是最后一个。
7.
.unshift()
函数用起来就像 .push()
函数一样, 但不是在数组的末尾添加元素,而是在数组的头部添加元素。
8.
函数的参数parameters
在函数中充当占位符(也叫形参)的作用,参数可以为一个或多个。调用一个函数时所传入的参数为实参,实参决定着形参真正的值。简单理解:形参即形式、实参即内容。
这是带有两个参数的函数, param1
和 param2
:
function testFun(param1, param2) {
console.log(param1, param2);
}
接着我们调用 testFun
:
testFun("Hello", "World");
我们传递了两个参数, "Hello"
和 "World"
。在函数内部,param1
等于“Hello”,param2
等于“World”。请注意,testFun
函数可以多次调用,每次调用时传递的参数会决定形参的实际值。
9.
严格相等运算符(===
)是相对于相等操作符(==
)的一种操作符。与相等操作符不同的是,它会同时比较元素的值和 数据类型
。
举个例子
3 === 3 // true
3 === '3' // false
3
是一个 数字
类型的,而'3'
是一个 字符
类型的,所以3不全等于'3'。
10.
对象 object
。
对象和数组很相似,数组是通过索引来访问和修改数据,对象是通过属性来访问和修改数据的。
这是一个示例对象:
var cat = {
"name": "Whiskers",
"legs": 4,
"tails": 1,
"enemies": ["Water", "Dogs"]
};
对象适合用来存储结构化数据,就和真实世界的对象一模一样,比如一只猫。
11.
第二种访问对象的方式就是中括号操作符([]
),如果你想访问的属性的名称有一个空格,这时你只能使用中括号操作符([]
)。
这是一个使用中括号操作符([]
)读取对象属性的例子:
var myObj = {
"Space Name": "Kirk",
"More Space": "Spock"
};
myObj["Space Name"]; // Kirk
myObj['More Space']; // Spock
提示:属性名称中如果有空格,必须把属性名称用单引号或双引号包裹起来。
12.
中括号操作符的另一个使用方式是用变量来访问一个属性。当你需要遍历对象的属性列表或查表时,这种方式极为有用。
这有一个使用变量来访问属性的例子:
var someProp = "propName";
var myObj = {
propName: "Some Value"
}
myObj[someProp]; // "Some Value"
还有更多:
var myDog = "Hunter";
var dogs = {
Fido: "Mutt", Hunter: "Doberman", Snoopie: "Beagle"
}
var breed = dogs[myDog];
console.log(breed)// "Doberman"
提示:当我们通过变量名访问属性的时候,不需要给变量名包裹引号。因为实际上我们使用的是变量的值,而不是变量的名称。
13.
当你创建了一个对象后,你可以用点操作符或中括号操作符来更新对象的属性。
举个例子,让我们看看 ourDog
:
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
让我们更改它的名称为 "Happy Camper",这有两种方式来更新对象的name
属性:
ourDog.name = "Happy Camper";
ourDog["name"] = "Happy Camper";
你也可以像更改属性一样给对象添加属性。
看看我们是如何给ourDog
添加 "bark"
属性:
ourDog.bark = "bow-wow";
或者
ourDog["bark"] = "bow-wow";
15.
删除对象的属性,例如:
delete ourDog.bark;
16.
有时检查一个对象属性是否存在,我们可以用.hasOwnProperty(propname)
方法来检查对象是否有该属性。如果有返回true
,反之返回 false
。
注意:如果你需要通过变量来访问对象的属性值,请用中括号操作符,点操作符不支持变量。
17,
使用构造函数来创建对象。
构造函数 通常使用大写字母开头,以便把自己和其他普通函数区别开。
下面便是一个 构造函数 了:
var Car = function() {
this.wheels = 4;
this.engines = 1;
this.seats = 1;
};
在 构造函数 中, this
指向被此 构造函数 创建出来的 对象 。所以,当我们在 构造函数 中写:
this.wheels = 4;
这时,它创建出来的新对象将带有 wheels
属性,并且赋值为 4
.
你可以认为 构造函数 描述了它所创建出来的对象。
使用构造函数时,我们通过在它前面使用 new
关键字 来对它进行调用,如下:
var myCar = new Car();
18.
不想总是创建相同的对象,我们要向 构造函数
中添加 参数
。像下面这样:
var Car = function(wheels, seats, engines) {
this.wheels = wheels;
this.seats = seats;
this.engines = engines;
};
现在,我们可以在调用 构造函数
时传入一组 参数
了。
var myCar = new Car(6, 3, 1);
这段代码将会使用这一组 参数
来创建出下面的对象:
{
wheels: 6,
seats: 3,
engines: 1
}
19.
map
方法可以方便的迭代数组,例子:
var timesFour = oldArray.map(function(val){
return val * 4;
});
map
方法会迭代数组中的每一个元素,并根据回调函数来处理每一个元素,最后返回一个新数组。注意,这个方法不会改变原始数组。
在我们的例子中,回调函数只有一个参数,即数组中元素的值 (val
参数) ,但其实,你的回调函数也可以支持多个参数,譬如:元素的索引index
、原始数组arr
。
20.
数组方法 reduce
用来迭代一个数组,并且把它累积到一个值中。
使用 reduce
方法时,你要传入一个回调函数,这个回调函数的参数是一个 累加器 (比如例子中的 previousVal
) 和当前值 (currentVal
)。
reduce
方法有一个可选的第二参数,它可以被用来设置累加器的初始值。如果没有在这定义初始值,那么初始值将变成数组中的第一项,而 currentVal
将从数组的第二项开始。
下面的例子使用了 reduce
来让数组中的所有值相减:
var singleVal = array.reduce(function(previousVal, currentVal) {21.
return previousVal - currentVal;
}, 0);
filter
方法用来迭代一个数组,并且按给出的条件过滤出符合的元素。
filter
方法传入一个回调函数,这个回调函数会携带一个参数,参数为当前迭代的项(我们叫它 val
)。
回调函数返回 true
的项会保留在数组中,返回 false
的项会被过滤出数组。
filter
为数组中的每个元素调用一次 callback
函数,并利用所有使得 callback
返回 true 或 等价于 true 的值 的元素创建一个新数组。callback
只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用。那些没有通过 callback
测试的元素会被跳过,不会被包含在新数组中。
callback
被调用时传入三个参数:
- 元素的值(item)
- 元素的索引(index)
- 被遍历的数组(arr)
22.
使用 sort 方法,你可以很容易的按字母顺序或数字顺序对数组中的元素进行排序。
与我们之前用的数组方法仅仅返回一个新数组不同, sort 方法将改变原数组,返回被排序后的数组。
sort 可以把比较函数作为参数传入。比较函数有返回值,当 a 小于 b,返回一个负数;当 a 大于 b ,返回一个正数;相等时返回0。
如果没有传入比较函数,它将把值全部转成字符串,并按照字母顺序进行排序。
下面的例子将展示 sort 的使用,传入的比较函数把元素按照从小到大的顺序进行排列:
var array = [1, 12, 21, 2];
array.sort(function(a, b) {
return a - b;
});
23.
你可以使用 reverse 方法来翻转数组。
var myArray = [1, 2, 3];
myArray.reverse();
结果myArray 变成了 [3, 2, 1]
24.
concat 方法可以用来把两个数组的内容合并到一个数组中。
concat 方法的参数应该是一个数组。参数中的数组会拼接在原数组的后面,并作为一个新数组返回。
下面是一个拼接数组的例子,用concat 把 otherArray拼接在 oldArray 的后面:
newArray = oldArray.concat(otherArray);
25.
使用 split 方法按指定分隔符将字符串分割为数组。
你要给 split 方法传递一个参数,这个参数将会作为一个分隔符。
26.
使用 join
方法来把数组转换成字符串,里面的每一个元素可以用你指定的连接符来连接起来,这个连接符就是你要传入的参数。
下面展示了使用 join
来将数组中的每一项放入字符串,并用 and
进行连接:
var veggies = ["Celery", "Radish", "Carrot", "Potato"];27.
var salad = veggies.join(" and ");
console.log(salad); // "Celery and Radish and Carrot and Potato.
toLocaleUpperCase:将字符串中所有的字母字符都将被转换为大写的,同时适应宿主环境的当前区域设置。
toUpperCase:将字符串中的所有字母都被转化为大写字母。
toLocaleLowerCase:将字符串所有的字母字符都被转换为小写,同时考虑到宿主环境的当前区域设置。
toLowerCase:将字符串中的字母被转换为小写字母。
28.
substr()
方法返回一个字符串中从指定位置开始到指定字符数的字符。
var str = 'abcdefghij'; console.log('(1, 2): ' + str.substr(1, 2)); // '(1, 2): bc' console.log('(-3, 2): ' + str.substr(-3, 2)); // '(-3, 2): hi' console.log('(-3): ' + str.substr(-3)); // '(-3): hij' console.log('(1): ' + str.substr(1)); // '(1): bcdefghij' console.log('(-20, 2): ' + str.substr(-20, 2)); // '(-20, 2): ab' console.log('(20, 2): ' + str.substr(20, 2)); // '(20, 2): '
slice()
从一个字符串中提取字符串并返回新字符串。在一个字符串中的改变不会影响另一个字符串。也就是说,slice
不修改原字符串,只会返回一个包含了原字符串中部分字符的新字符串。
注意:slice()
提取的新字符串包括beginSlice
但不包括 endSlice,第一个参数从索引0开始。
例1:str.slice(1, 4)
提取新字符串从第二个字符到第四个 (字符索引值为 1, 2, 和 3)。
例2:str.slice(2, -1)
提取第三个字符到倒数第二个字符。
begin 可选
从该索引处开始提取原数组中的元素(从0开始)。
如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2)表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
如果省略 begin,则 slice 从索引 0 开始。
end可选
在该索引处结束提取原数组元素(从0开始)。slice会提取原数组中索引从 begin 到 end 的所有元素(包含begin,但不包含end)。
slice(1,4) 提取原数组中的第二个元素开始直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。
如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1)表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
如果 end 被省略,则slice 会一直提取到原数组末尾。
如果 end 大于数组长度,slice 也会一直提取到原数组末尾。
var str1 = 'The morning is upon us.'; var str2 = str1.slice(4, -2); console.log(str2); // OUTPUT: morning is upon u var str = 'The morning is upon us.'; str.slice(-3); // returns 'us.' str.slice(-3, -1); // returns 'us' str.slice(0, -1); // returns 'The morning is upon us' var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']; var citrus = fruits.slice(1, 3); // fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'] // citrus contains ['Orange','Lemon']
splice()
方法通过删除现有元素和/或添加新元素来更改一个数组的内容。
var myFish = ["angel", "clown", "mandarin", "surgeon"];
//从第 2 位开始删除 0 个元素,插入 "drum"
var removed = myFish.splice(2, 0, "drum");
//运算后的 myFish:["angel", "clown", "drum", "mandarin", "surgeon"]
//被删除元素数组:[],没有元素被删除
//从第 3 位开始删除 1 个元素
removed = myFish.splice(3, 1);
//运算后的myFish:["angel", "clown", "drum", "surgeon"]
//被删除元素数组:["mandarin"]
//从第 2 位开始删除 1 个元素,然后插入 "trumpet"
removed = myFish.splice(2, 1, "trumpet");
//运算后的myFish: ["angel", "clown", "trumpet", "surgeon"]
//被删除元素数组:["drum"]
//从第 0 位开始删除 2 个元素,然后插入 "parrot", "anemone" 和 "blue"
removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
//运算后的myFish:["parrot", "anemone", "blue", "trumpet", "surgeon"]
//被删除元素的数组:["angel", "clown"]
//从第 3 位开始删除 2 个元素
removed = myFish.splice(3, Number.MAX_VALUE);
//运算后的myFish: ["parrot", "anemone", "blue"]
//被删除元素的数组:["trumpet", "surgeon"]
注释:请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。
29.
小数值舍入为整数的几个方法:Math.ceil()、Math.floor()和Math.round()。 这三个方法分别遵循下列舍入规则:
◎Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
◎Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
◎Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。
30.
filter()
方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
31.
如果Boolean构造函数的参数不是一个布尔值,则该参数会被转换成一个布尔值.如果参数是
32.0
, -0
, null
, false
, NaN
, undefined
, 或者空字符串 (""),生成的Boolean对象的值为false. 其他任何值,包括任何对象或者字符串"false"
, 都会创建一个值为true的Boolean对象.
arguments 是一个类数组对象。代表传给一个function的参数列表。
很显然,既然是类数组对象,说明它不是真正的数组,没有数组所具有的属性和方法(除了 length
属性)。
33.
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。
注释:字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN。
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
注释:该方法是 String 的静态方法,字符串中的每个字符都由单独的数字 Unicode 编码指定。
它不能作为您已创建的 String 对象的方法来使用。因此它的语法应该是 String.fromCharCode(),而不是 myStringObject.fromCharCode()。
34.
typeof可获取参数并判断其类型(number,string等类型),使用方法例如typeof p==“number”。当方法所传参数个数不确定时可结合arguments使用。