新增关键字
var 有作用域提升的作用
let 和 const 不会提升作用域
字符串的拓展·
" `` " 双反斜角可以识别多行字符串
${} 字符串占位符,要配合反斜角使用
- includes():判断是否包含指定字符串,如果包含返回 true,反之 false。
- startsWith():判断当前字符串是否以指定的子字符串开头,如果是则返回 true,反之 false。
- endsWith():判断当前字符串是否以指定的子字符串结尾,如果是则返回 true,反之 false。
repeat(n) 方法用于返回一个重复 n
次原字符串的新字符串,其参数 n
为整数,如果设置 n
为小数,会自动转换为整数。
如
let str = "HELLO";
console.log(str.repeat(4));
replaceAll() 方法来解决这个问题,它可以用来替换所有匹配的字符串就,解决replace()方法只能替换匹配到的第一个字符串的问题。
数组的拓展
var arr = Array.from(arrLike);
将可遍历的对象转换为数组(基于原来的对象创造一个数组)
for (variable of iterable) {
}
新的遍历方式,variable存值,iterable存数据结构,可以遍历字符串,数组,列表等
扩展运算符(...)
将对象展开,如
let animals = ["老虎🐯", "乌龟🐢", "鱼🐟"];
let newAnimals = [...animals];
console.log(newAnimals);
相当于将animals赋值给newAnimals
函数的拓展
function func(name, words = "你好") {
console.log(`${words}${name}`);
}
可以直接在形参设置默认值,默认值设置在形参的末尾
function parameter() {
return "🖤";
}
function func(words, name = parameter()) {
console.log(words, name);
}
还可以设置函数为默认值
function func(name, value, mount, { a, b, c, d = "苹果" }) {
console.log(`${name}用${value}元钱买了${mount}个${d}。`);
console.log(`${name}用${value}元钱买了${mount}个${c}。`);
}
func("小蓝", 5, 3, {
a: "西瓜",
b: "菠萝",
c: "桃子",
});
函数还可以使用键值对设置参数
// 剩余参数必须是函数的最后一个参数
myfunction(parameters, ...rest);
rest为剩余参数,简写参数列表
如:
function func(a, b, ...rest) {
console.log(rest);
}
func(1, 2, 3, 4, 5, 6, 7, 8, 10);
rest:[3,4,5,6,7,8,9,10]
(param1,param2,...,paramN) => {expression}
箭头函数语法
箭头函数参数单个时,可以省略括号:
parama => {expression}
类的拓展
class MyClass {
// constructor 方法是类的默认方法
constructor(num) {
this.num = num;
this.enginesActive = false;
}
// 相当于 MyClass.prototype.startEngines
startEngines() {
console.log("staring...");
this.enginesActive = true;
}
}
类的声明(class),语法糖,原理仍然是构造函数
const myclass = new MyClass(1);
myclass.startEngines();
js中类的继承大致和Java一样,不过js可以extends后可以接表达式
js的super也大致和Java一样
静态属性和静态方法大致也和Java类似,也可以被继承
// 私有属性
#propertiesName;
// 私有方法
#methodName;
js用#定义私有属性和私有方法,是因为js没有独立的类型,用#作为标识易于区分
新增对象方法
console.log(Object.is(-0,+0));
console.log(Object.is(NaN,NaN));
console.log(Object.is(7,"7"));
Object.is() 比较两个值的大小,区别于“==”的比大小
Object.assign(obj,obj2,obj3)
将后面的所有对象合并到第一个对象,后面的属性会覆盖前面的属性
而且这种合并是一种浅拷贝,不会改变地址
Set
let s = new Set(["blue","black","red"])
s.add(1)
s.add(100)
console.log(s+" "+s.size)
Set是一种不允许出现重复数据的类似数组的数据结构
使用add添加元素,size获取长度
new Set(["blue","black","red"])初始化时括号里要加入中括号[]
使用delete方法删除特定元素
使用has方法判断元素是否在Set中
使用clear方法清除所有数据
s.forEach(function details(values){
console.log(values)
})
遍历方法,在forEach中写入一个回调方法,供每个元素执行,values为要传入元素的形参
Map
相比于对象的键值对,map的键值对支持任意类型,并且可以被直接被forEach遍历
m.set([1,2,3],"saiuhd")
m.set("as",1)
m.set(3,"Sfyasuf")
console.log(m)
console.log(m.get(3))
Map使用set添加键值对,用get获取值
has() 用来判断指定键名对应的数据是否存在于当前集合中。
delete() 用来删除指定键名的数据。
clear() 用来清空集合中的数据。
let m = new Map([
[1,"张三"],
[2,"李四"],
[3,"王五"],
[4,"赵六"]
])直接初始化也需要[],并且键值对也需要[]包裹
m.forEach(function(value,key,ownerMap){
console.log(value)
console.log(key)
console.log(ownerMap)
})
遍历类似Set,先提供一个回调函数,value现在被调用的值,key为该值的键,ownerMap表示整个Map