1.数组
1.直接创建,缺点是不能批量创建(如长度100)
a = [1,2,3]
console.log(a) //[ 1, 2, 3 ]
2.用new方法创建
只用一个参数,则该参数表示数组长度,数组元素为null
a = new Array(1)
console.log(a) //[ <1 empty item> ]
若要批量创建,用fill方法:
a = new Array(10).fill(2)
console.log(a) //[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
用超过一个参数,则参数为所有数组元素
a = new Array(1,2)
console.log(a) //[ 1, 2 ]
3.数组可以看做特殊的键值对,键为下标,值为对应元素
arr = [1, 2, 3.14, 'Hello', true, null, undefined];
for (var i in arr) {
console.log(i, arr[i]);
}
输出:
0 1
1 2
2 3.14
3 Hello
4 true
5 null
6 undefined
arr = [1, 2, 3.14, 'Hello', true, null, undefined];
console.log(3.14 in arr); //false,值不在arr的键集合中
console.log(3 in arr); //true,下标3存在
console.log(7 in arr) //false,下标7越界
2.Map
https://www.liaoxuefeng.com/wiki/1022910821149312/1023024181109440
创建:
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
查值:
m.get('Michael'); // 95
注意不能用m['Michael']
的形式查值
添加:
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
判断是否存在:
m.has('Adam'); // 是否存在key 'Adam': true
注意不能用in
操作符判断是否存在键
删除:
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
3.箭头函数:注意=号与>号之间不能有空格
x => x * x
相当于
function (x) {
return x * x;
}
多个参数:
(x,y) => x*10+y
相当于
function(x, y) {
return x*10 + y;
}
进阶:写一个函数,用map和reduce函数,将字符串s='13579’转为数字,不能直接用parseInt:
function string2int(s) {
return s.split('').map(s=>+s).reduce((x,y)=>x*10+y);
}
参考 https://www.liaoxuefeng.com/wiki/1022910821149312/1031549578462080
4.+'号运算符作为一元运算符
此时Expression将进行ToNumber()操作。
如:
var b = '1' //字符1
console.log(typeof b) //string
console.log(typeof +b) //number
参考 https://www.cnblogs.com/polk6/p/js-adv-addopr.html
5.!
运算符
作用是取非,但对于不同的数据类型有不同的计算结果,但类型都是布尔值
:
1)数值:
var x = 0;
console.log(!x); //true
x = -0.00;
console.log(!x); //true
x = -1.5;
console.log(!x); //false
可知只有数值0(包括整数0,小数0以及负0)的真值为false,因此取反为true。
其余数值真值均为true。
2)字符串
var x = '';
console.log(!x); //true
x = '125haha蛤蛤';
console.log(!x); //false
可知只有空字符串真值为false。
3)布尔值
var x = false;
console.log(!x); //true
布尔值只有两种,false取反为true
4)对象
var x = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};
console.log(!x); //false
x = {};
console.log(!x); //false
console.log(Object.keys(x).length === 0) //true
可知无论是空对象还是空对象,布尔值均为true,因此判断是否为空只能看key个数是否为0
5)null和undefined
var x = null;
console.log(!x); //true
x = undefined;
console.log(!x); //true
null
和undefined
真值均为false
6.null和undefined的类型
var x = null;
console.log(typeof x); //object
x = undefined;
console.log(typeof x); //undefined
注意null类型是object
7.对象的属性名一般要求必须是一个有效的变量名。如果属性名包含特殊字符,就必须用''
括起来:
var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
'哈哈': true
};
xiaohong的属性名middle-school不是一个有效的变量,就需要用''
括起来。访问这个属性也无法使用.
操作符,必须用['xxx']
来访问:
xiaohong['name']; // '小红'
xiaohong.name; // '小红'
xiaoming['哈哈']; //‘哈哈’
xiaoming.哈哈; //‘哈哈’
xiaohong['middle-school']; // 'No.1 Middle School'
xiaoming.middle-school; //报错
https://www.liaoxuefeng.com/wiki/1022910821149312/1023020997017056