参考了廖雪峰老师的文档以及javaScript DOM编程艺术
一、基本语法
1.注释
1.1 单行注释
1.2 多行注释
2.赋值与输出
2.1 变量与赋值
**不用var申明的变量会被视为全局变量,为了避免这一缺陷,所有的JavaScript代码都应该使用strict模式。在第一行加入 ‘use strict’ **
mood="happy";
age=33;
2.2 输出
alert(mood);
alert(age);
console.log(mood);
console.log(age);
二、数据类型
1.字符串
var mood='happy';
var mood="happy";
2.数值
JavaScript不区分整数和浮点数,统一用Number表示。
123;
0.456;
1.2345e3;
-99;
NaN;
Infinity;
3.布尔值
true / false
var sleeping=true;
var sleeping=false;
三、对象
键——值的无序组合,相当于python中的字典
var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};
如果属性名包含特殊字符,就必须用’ '括起来
var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};
1.取值
普通取值用 . ,如果属性名包含特殊字符,必须用[‘xxx’]来访问:
person.name;
person.zipcode;
xiaohong['middle-school'];
xiaohong['name'];
xiaohong.name;
2.相关方法
- 删除属性
delete xiaoming.age;
delete xiaoming['age'];
- 添加属性
xiaoming.school=xdu;
- 判断属性是否存在
- in
如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的
'toString' in xiaoming;
- hasOwnProperty()
判断一个属性是否是xiaoming自身拥有的,而不是继承得到的
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name');
xiaoming.hasOwnProperty('toString');
四、字符串
1.多行字符串
用反引号 ... 表示:
`这是一个
多行
字符串`;
2.模板字符串
将字符串连接可以用‘+’ ,但有些繁琐。使用模板字符串会自动替换字符串中的变量。
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
3.操作字符串
常见操作有:
var s = 'Hello, world!';
1.求长度
s.length;
2.把一个字符串全部变为大写
s.toUpperCase();
3.把一个字符串全部变为小写
s.toLowerCase();
4.搜索指定字符串出现的位置
s.indexOf('world');
s.indexOf('World');
5.返回指定索引区间的子串
s.substring(0, 5);
s.substring(7);
五、数组
1.创建
JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。
var shuzu=Array(4)
var shuzu=Array()
var shuzu=['John',1940,false,name]
2.一些属性
- 要取得Array的长度,直接访问length属性:
var arr = [1, 2, 3.14, 'Hello', null, true];
arr.length;
- 直接给Array的length赋一个新的值会导致Array大小的变化:
var arr = [1, 2, 3];
arr.length;
arr.length = 6;
arr;
arr.length = 2;
arr;
- 如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化,不会报错:
var arr = [1, 2, 3];
arr[5] = 'x';
arr;
3.相关方法
- indexOf
var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10);
arr.indexOf(20);
arr.indexOf(30);
- slice
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array. 如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array - push和pop
空数组继续pop不会报错,而是返回undefine
arr;
arr.pop();
arr;
- unshift和shift
如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉 - sort
sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序 - reverse
reverse()把整个Array的元素给调个个,也就是反转 - splice
splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素,会以数组的形式返回删除的元素。
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
arr.splice(2, 3, 'Google', 'Facebook');
arr;
- concat
concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array(并没有修改当前Array) concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里。
var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]);
- join
把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串。
var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-');
六、条件判断和循环
1.条件判断
if (... )
{
...
}
else if (...)
{
...
}
else{
...
}
2.循环
- for
var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
console.log(x);
}
- for…in
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key);
}
}
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i);
console.log(a[i]);
}
注意,for … in对Array的循环得到的是String而不是Number。 3. while
var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x;
七、Map和Set
1.Map
Map是一组键值对的结构,具有极快的查找速度。
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael');
初始化Map需要一个二维数组,或者直接初始化一个空Map
var m = new Map();
m.set('Adam', 67);
m.set('Bob', 59);
m.has('Adam');
m.get('Adam');
m.delete('Adam');
m.get('Adam');
2.Set
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
var s1 = new Set();
var s2 = new Set([1, 2, 3]);
s.add(4);
s;
通过delete(key)方法可以删除元素
var s = new Set([1, 2, 3]);
s;
s.delete(3);
s;
八、iterable
遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。
- for…of
具有iterable类型的集合可以通过新的for … of循环来遍历。
var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) {
console.log(x);
}
for (var x of s) {
console.log(x);
}
for (var x of m) {
console.log(x[0] + '=' + x[1]);
}
for … of循环和for … in循环区别: for … in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
console.log(x);
}
for … of循环则完全修复了这些问题,它只循环集合本身的元素
- forEach
它接收一个函数,每次迭代就自动回调该函数
'use strict';
var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
console.log(element + ', index = ' + index);
});
A, index = 0
B, index = 1
C, index = 2
如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们。
var a = ['A', 'B', 'C'];
a.forEach(function (element) {
console.log(element);
});
|