JavaScript 个人零碎笔记,不作为学习JavaScript 教程使用
1.字符串:
- es6 针对多行字符串使用 ``
例子: var name = ` 我
高 ` - es6 针对字符串拼接,使用模板字符串 ${变量}
例子:var firstName = '张' var lastName = '三' var fullName = `{firstName}${lastName},是我的全名` 注意:模板字符串采用 `` 表示,插值才有效
- 字符串是不可变的
例子:
var name = "wang5"
name[0] = "z"
console.info(name) // 打印结果 wang5 ,没有改变
2.数组
- slice 方法,截取数组,返回新数组
例子:
var attr = [8,2,3]
var temp = attr.slice(0,1)
var temp1 = attr.slice(1)
console.log(temp) // [ 8 ]
console.log(temp1) // [ 2,3 ]
- unshift 向数组头部插入元素 / push 向数组尾部插入元素 ;shift 数组第一个元素删除 / pop 数组最后一个元素删除
例子:
var attr = [8,2,3]
attr.unshift(10);
console.log(attr) // [8,2,3,10]
attr.shift();
console.log(attr) // [8,2,3]
attr.push(0)
console.log(attr) //[8,2,3,0]
attr.pop()
console.log(attr) //[8,2,3]
- splice 可以实现删除,返回删除的数组 ; 可以实现添加,返回新数组;可以实现既删除又添加,返回新数组
var attr = [8,2,3]
//实现删除
var delAttr = attr.splice(0,2)
console.log(delAttr) //[8,2]
console.log(attr) //[3]
//实现添加
attr.splice(0,0,4,5)
console.log(attr) //[4,5,3]
//既实现删除,又实现条件
attr.splice(0,1,8,100)
console.log(attr) // [8,100,5,3]
3. 字面量对象 简单聊下 in 运算符 和 对象 hasOwnProperty 方法,看例子
var person = {
name: '张三',
age: 18
}
console.log('name' in person) //true
console.log('toString' in person) //true 然后 toString 属性是从Object 继承的,不属于 person对象本身的
console.log(person.hasOwnProperty('toString')) //false hasOwnProperty 判断本身具有的属性
4. es6 提供的 Map 和 Set , 增强 在 js 中表示键值对 {} 中 key 只能为 字符串的问题,在 Map 和 Set 中可以定义key 为其他类型
- Map 提供 set 方法 / get 方法 (存取值方法) 和 delete 方法 删除 以及 has 方法查看是否有key,返回真假值
例子:
//var m = new Map([[1, 'x'], [true, 'y'], [3, 'z']]);
var m = new Map();
m.set("a",1)
m.set("b",2)
var flag = m.has("b")
m.delete("b")
console.log(flag)//flag true
m.forEach(function (value, key, map) {
console.log(value,key,map);
});
注意,Map 中的key 如果重复,后者覆盖前者
- Set add 方法 和 delete 方法 (添加和删除方法),注意 Set 结构中没有 值,并且 key 不能重复,重复会自动过滤
var s1 = new Set(); // 空Set
//var s2 = new Set([1, 2, 3,3]); // 含1, 2, 3
s1.add(3);
s1.delete(3)
- Array / Map / Set 遍历问题
Array 可以通过下标来遍历,但 Map / Set 不能。三者都可以采用 iterable(迭代器)类型来遍历,即三者是iterable 类型。es6 提供了 for ... of 遍历方式,弥补 for... in (尽量不采用,弊端在于在遍历数组的时候,如果数组添加新属性,也会迭代出来)。
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) { // 遍历Array
console.log(x);
}
for (var x of s) { // 遍历Set
console.log(x);
}
for (var x of m) { // 遍历Map
console.log(x[0] + '=' + x[1]);
}
三者可以使用 es5 提供的 forEach遍历
Set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});
Map的回调函数参数依次为value、key和map本身:
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们。例如,只需要获得Array的element:
var a = ['A', 'B', 'C'];
a.forEach(function (element) {
console.log(element);
});