EMCA(European Computer Manufacturers Association) 欧洲计算机制造商协会
EMCAScript,是JavaScript语言的标准,JavaScript可以看作是EMCAScript的实现(虽然是现有JS后有ES)
EMCA会在每年的6月份正式发布一次规范的修订,而这次的发布也将作为当年的正式版本。以后的改动基于上一版本进行修改。
- ES6是15年
- ES7是16年
- ES8是17年
- ES9是18年
新特性:
ES5:
'use strict' 严格模式 必须要使用var声明才能使用,避免创建全局变量。
forEach语法:
var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) { //每次迭代调用此回调函数
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
console.log(element + ', index = ' + index);
});
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
ES6:
`反引号` 多行字符串 反引号之间的内容保留原来的格式 不止是换行 包括空格呀什么的 都保留下来
`模板字符串`
var name = '小明';
console.log(`你好 , ${name}`);
Map:
//var m = new Map();
var m = new Map([['zhangsan',22], ['lisi',23], ['wangwu',24]]); //二维数组
m.get('lisi'); //获取
m.delete('lisi'); //删除
m.has('lisi'); //是否有
m.set('lisi', 23); //添加
Set:
//var s = new Set();
var s = new Set([1,2,2,3]);
s.add(4); //添加
s.add(4); //集合不重复
s.delete(4); //删除
s.has(4); //是否有属性
for ... of语法:Array Set Map都属于Iterable类型 可以使用for ... of语法
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) { //for of遍历的才是集合本身的元素
console.log(x); // 'A', 'B', 'C'
}
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) { //for in遍历的是对象的属性
console.log(x); // '0', '1', '2', 'name'
}
基本数据类型
- 10/3 = 3.3333333333333335 js的除法不是整除 所以在进行浮点数计算比较时 不能进行精确的比较。例如 1/3 === 1-2/3 返回false。 正确做法应该是 Math.abs(1/3 - (1-2/3)) < 0.0000001
- true == 1 返回true js的==运算符会自动转换类型 我们应该坚持使用===,这是连类型一起比较的正常的等于
- undefined表示值未定义 null表示值为空 两者是有差别的,前者是对象都不存在,后者对象是存在的,只不过赋值为null undefined仅仅在判断函数参数是否传递的情况下有用
- 在js中 被视为false的值是 undefined, null, NaN, 0, ''。 这些值在进行逻辑运算时被视为false但是并不代表它们都==false
undefined == false false null == false false NaN == false false 0 == false true '' == false true undefined && true undefined null || true true '' && true "" 'abc' && true true
可以看到只有0和空字符串可以直接==false 但是它们全部可以直接参与逻辑运算 js中的逻辑运算没有类型之分,毕竟动态语言
-
var person{ name: '张飞', age: 18 'middle-school': '38中' } person.name //访问属性直接. person['age'] //也可以这样 person['middle-school'] //这种非法的变量名 就必须用数组的方式 delete person.name //删除属性 person.name = '张飞' //添加属性 'age' in person; //'age'这个属性在person对象中存在 'toString' in person; //'toString' 也存在 因为toString是object的属性 person.hasOwnProperty('age') //'age' 是person自己的属性 person.hasOwnProperty('toString') //'toString' 不是person自己的属性
js对象是一组键值对集合,键是string类型 值任意,事实上这就是常说的一个JSON对象。之前居然没认出来 忏愧。
-
关于字符串的操作 js和java几乎如出一辙 indexOf charAt substring 包括字符串不能修改 唯一不同是js字符串看作是数组,下标直接访问 长度直接有属性length。
-
数组: 用[]表示 当然也可以用new Array()创建 操作方式和python有些相似 都是动态类型嘛
var arr = [10, 3.14, 'ab', null, true]; arr.indexOf('ab'); arr = arr.slice(0, 2); //相当于字符串的substring arr.push(11,13,12) ; //后面添加 arr.pop(); //后面删除 arr.unshift(2.55,6); //前面添加 arr.shift(); //前面删除 arr.splice(2,3,'a','b'); //从2开始删除3个 并从位置2插入'a','b' arr.sort(); //[10, 11, 13, 2.55, 3.14, 6] arr.reverse(); //反转 arr.concat([1,2,3]); //连接数组 arr.join('-'); //把数组元素转换成字符串中间用 - 连接
基本语法
条件语句
if(a>=18 && a<=25){
}else if(a>25 && a<=40){
}else{
}
循环语句
var x = 1;
var i;
for(i=1; i<=10; i++){
x *= i;
}
//for...in 遍历的是对象的属性名称 数组也是对象 索引可以看作是属性
for(var key in person){ //key是键值
console.log(key + ':' + person[key]);
}
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); // '0', '1', '2' 这里遍历输出的是字符串
console.log(a[i]); // 'A', 'B', 'C'
}
while(x>0){
x--;
}
do{
x--;
}while(x>0)