1.JS的简介
1、JavaScript和ECMAScript
2. 快速入门
JS可以嵌入到任何位置,但一般放在head里面。代码可以直接写在html中或者链接到外部地址。
使用控制台Console来调试。
2.1 基本语法
分号; 花括号{} 注释// 块注释/*...*/
2.2 数据类型和变量
数据类型:合法的数字,Infinity(无穷大),NaN(not a number)
字符串:字符串是以单引号'或双引号"括起来的任意文本
布尔值:true和false。&&:与运算;||:或运算;!:非运算
比较运算符:==和===:== 会先转化类型再比较,但是经常得到诡异的结果。=== 不会转化,如果类型不同就返回false,相同才比较。由于这个缺陷,因此始终使用===来比较。 能判断NaN的只有isNaN(NaN)这个方法。
null:空值。
数组:使用[]来表示,元素用,隔开。也可使用new Array(1,2,3)来定义,但是强烈建议使用[]来定义。
对象:JavaScript的对象是一组由键-值组成的无序集合。
变量:申明一个变量用var语句,变量可以多次赋值,但是只能申明一次。
strict模式:由于没有强制使用Var声明带来的后果,会使用一个变量成为一个全局变量而造成不可预测的影响。使用"use strict"可以强制使用Var进行声明,不使用运行将报错
2.3 字符串
使用反引号可以表示多行字符串
模板字符串:${变量名} 如果浏览器不支持,则使用+号连接
字符串操作:
1.获取字符串的长度:
var s = 'Hello, world!';
s.length;
2.获取字符串的指定位置:
var s = 'Hello world!';
s[0];
s[7];
3.字符串不可变,赋值也没有效果
4.toUpperCase()可以把一个字符串全部变为大写。
5.toLowerCase()可以把一个字符串全部变为小写。
6.indexOf()会搜索指定字符串出现的位置。
7.substring()返回指定索引区间的子串。
2.4 数组
1.使用 length来获取数组的长度。
2.请注意,直接给Array的length赋一个新的值会导致Array大小的变化
大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。在编写代码时,不建议直接修改Array的大小,访问索引时要确保索引不会越界。
3.IndexOf
与String类似,Array也可以通过indexOf()来搜索一个指定的元素的位置。
var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30); // 元素30没有找到,返回-1
arr.indexOf('30'); // 元素'30'的索引为2
4.slice
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array:
var arr = ['A','B','C','D','E','F','G']
arr.slice(0,3) //从第一个截取到第三个,['A','B','C']
5.push和pop
push()是给末尾追加元素,pop()是删除最后一个元素
6.unshift和shift
unshift()是给数组首部追加元素,shift是删除首部的元素
7.sort
sort()直接调用就进行默认的排序,后面学到函数可以直接自定义排序
8.reverse
reverse是将整个数组颠倒过来
9.splice
splice()是修改数组的万能办法:
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
10.concat
concat()是将当前数组和另一个数组连接起来:
注:要把数组放在concat里面
var arr = ['a','b','c'];
var added = arr.concat([1,2,3]);
arr; //['a','b','c']
added; //['a','b','c',1,2,3]
11.join
join是将数组里面元素用一个符号链接起来
var arr = ['A','B','C',1,2,3];
arr.join('-'); //'A-B-C-1-2-3'
12.多维数组
数组里面嵌套着数组
arr = [1,2,3,['A','B','C']]
2.5 对象
1.对象是由若干个键值对组成
形象是:
var xiaoming = {
name:'小明',
age:18,
score:null
};
2.访问对象的属性:
- object.prop
- 对象名[‘键’]
有一些键 是无效的,就需要使用第二种。但是第一种比较方便。
3.判断某属性是否被对象所拥有:
- 使用in;//使用in有个问题是如果改属性为继承的,也会得到true结果
- 使用hasOwnProperty()方法
2.6 条件判断
1.使用if 的样板:
var age = 20;
if (age >= 18) {
alert('adult');
} else {
console.log('age < 18');
alert('teenager');
}; //不要省略花括号哦
2.使用多条件的:
var age = 3;
if (age >= 18) {
alert('adult');
} else if (age >= 6) {
alert('teenager');
} else {
alert('kid');
};
2.7 循环
JS中有两种循环,一种是for,一种是while
1、for循环,通过初始条件、结束条件和递增条件来循环执行语句块:
var x = 0;
var i;
for (i=1; i<=10000; i++) {
x = x + i;
}
x; // 50005000
for常用来遍历数组
var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
alert(x);
}
使用for…in 来对对象进行遍历:
var a = {
name:'xiaoming',
age:18,
city:'beijing',
};
for (var key in o){
alert(key);
}
由于数组也是一个对象,因此可以使用for遍历出索引号:
var arr = ['A','B','C']
for (var i in arr){
alert(i); //'0','1','2'
alert(arr[i]); //'A','B','C'
}// 循环得到的结果是字符串而不是数字
while循环
while循环只有一个判断条件,条件满足,就不断循环,条件不满足时则退出循环。
do…while循环
最后一种循环是do { … } while()循环,它和while循环的唯一区别在于,不是在每次循环开始的时候判断条件,而是在每次循环完成的时候判断条件。
2.8 Map和Set
map类似于python中的字典(dict)
初始化Map需要一个二维数组,或者直接初始化一个空Map。Map具有以下方法:
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
使用set设置键值对,使用has判断是否存在,使用get获取值,使用delete删除键
set和python中的set基本一样,都是不存储值,只有键:
在set中键不可重复
要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set:
var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
使用add来增加键,是使用delete删除键。
2.9 iterable
遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。
具有iterable类型的集合可以通过新的for … of循环来遍历。