es6基础语法

绝地灬酷狼 2022-09-11 12:30 440阅读 0赞

1、语法标准:

​ 开发者

​ 执行者(node.js /浏览器)

​ 1.安装nodejs

​ 2.查看版本

​ 3.第一个程序

​ 1)nodejs交互界面

​ 2)编写代码,执行hello.js

2、注释

3、变量声明

​ 弱类型ECMAScript5

​ 重复声明

​ var a;

​ 变量的提示

​ es5 函数作用域

  1. function foo() {
  2. var result = 0;
  3. for (var i = 0; i <= 100; i++) {
  4. result += i;
  5. }
  6. console.log(i);
  7. }

​ es6引入let,const

  1. // 将var的变量变成一个局部的,让外部不能访问
  2. function foo() {
  3. {
  4. // let i = 3;
  5. (function() {
  6. var i = 3;
  7. })();
  8. }
  9. console.log(i);
  10. }
  11. foo();

let声明变量,具有局部作用域,不存在变量声明的提升,不可以对一个变量进行重复声明。暂时性死区。

const 常量 只能赋值一次的变量,其他与let保持相同特性

  1. const obj = { age:11}
  2. obj.age++

4、解构

使用模式匹配方式从一个对象中、数组中获取值的方式

  1. let obj = {
  2. name:"terry",
  3. age:12,
  4. gender:"male",
  5. telephone:'15555223',
  6. email:'sksksk@qq.com'
  7. }
  8. let a = obj.name;
  9. let b = obj.age;
  10. let c = obj.gender;

4.1对象解构

对象的属性没有次序,变量必须与属性同名,才能得到正确的值。

  1. let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
  2. baz // "aaa"
  3. foo //报错:foo is not defined

实际上说明,对象的解构赋值是下面形式的简写

let { foo: foo, bar: bar } = { foo: "aaa", bar: "bbb" };

  1. let {
  2. //第一个name用来匹配的,第二个name新建的一个变量,用来存放第一个name匹配的值
  3. name:name,
  4. age:age
  5. } = {
  6. name:"terry",
  7. age:12,
  8. gender:"male",
  9. telephone:'15555223',
  10. email:'sksksk@qq.com'
  11. }
  12. 简便写法
  13. let {
  14. //第一个name用来匹配的,第二个name是匹配的值
  15. name,
  16. age,
  17. my
  18. gend:"男"
  19. } = {
  20. name: "terry",
  21. age: 12,
  22. telephone: '15555223',
  23. email: 'sksksk@qq.com'
  24. }
  25. console.log(name, age);//terry 12
  26. console.log(name, age);//terry 12 undefined

嵌套对象的解构

  1. let node = {
  2. p1: {
  3. p2: {
  4. name: 'lisi',
  5. age: 25
  6. }
  7. },
  8. l1: 3
  9. };
  10. let { p1: { p2 } } = node;
  11. console.log(p1);//error p1不存在
  12. console.log(p2);//{name:'lisi',age:25}
  13. console.log(p2.age);
  14. let { length} = [1,2,3]
  15. console.log(length);//3

如何使用push方法往类数组中推入元素

4.2数组解构

let [a,b,c] = [“terry”,“tom”,“sjsj”]

let [a,b,c,d] = [“terry”,“tom”,“sjsj”]

5、字符串拓展

5.1遍历

for…of循环

  1. let str = "hello world"
  2. for(let s of str){
  3. console.log(s);
  4. }
  5. //依次打印出h,e,l...

2.API拓展

​ 1)静态方法

​ 2)实例(成员)方法

  1. let s = 'Hello world!';
  2. //表示参数字符串是否在原字符串的头部
  3. s.startsWith('hel');//true
  4. //表示参数字符串是否在原字符串的尾部
  5. s.endsWith('d!');//true
  6. //表示参数字符串是否在原字符串的尾部
  7. includes('o');//true

repeat()

  1. console.log("x".repeat(3)); // "xxx"
  2. console.log("hello".repeat(2)); // "hellohello"

padStart():头部补全

padEnd():尾部补全

  1. // padStart()和padEnd()一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串
  2. "x".padStart(5,"b");//bbbbbx
  3. "x".padEnd(5,"b");//xbbbbb

trimStart():删除开始的空格

trimEnd():删除尾部的空格

trim():删除字符串开头和尾部的空格

  1. let aa = " b ";
  2. aa.trimStart();//"b "
  3. aa.trimEnd();//" b"
  4. aa.trim();//"b"

浅复制是指只复制原变量的地址,当原变量改变时,该变量也会改变

深复制是指对原变量复制一个新的变量,当原变量发生改变时,不会对新变量产生影响

6、对象扩展

6.1对象简写

  1. let name = "terry";
  2. let age = 12;
  3. let sayName = function(){}
  4. let obj = {
  5. name:name,
  6. age:age,
  7. sayName:sayName
  8. }
  9. //这种写法比较复杂,下面使用简单的
  10. let obj = {
  11. name,
  12. age,
  13. sayName
  14. }

6.2扩展运算符

  1. let { name,...other} = { name: 'terry', age: 12, gender: 'male' };
  2. name // 'terry'
  3. other // {age: 12, gender: 'male'}

对象的扩展运算符( … )⽤于取出参数对象的所有可遍历属性,拷⻉到当前对象之

中。 对象的扩展运算符等同于使⽤ Object.assign() ⽅法。

  1. let obj = { name: 'terry', age: 12, gender: 'male'} let o = { ...obj} //将对象obj进行解构,然后将其赋值给o
  2. o // {name: 'terry', age: 12, gender: 'male'}

深拷贝:

6.3Object静态方法扩展

6.3.1 Object.is()

用于比较两个值是否相等,与===全等的行为基本一致,对于NaN,+0,-0等并不能做出严格相等来判断。

  1. +0 === -0//true
  2. NaN === NaN//false
  3. Object.is(+0,-0);//false
  4. Object.is(NaN,NaN)//true

6.3.2 Object.assign()

用于对象的合并,将源对象(source)的所有可枚举属性,复制到⽬标对象(target)。

  1. let p1 = { name:"zs"}
  2. let p2 = { age:15}
  3. let p3 = Object.assign(p1,p2)
  4. p3//{ name: 'zs', age: 15 }
  5. p1//{ name: 'zs', age: 15 }
  6. p2//{ name: 'zs', age: 15 }
  7. p3.name===p1.name//true

这说明使用Object.assign()静态方法,是将参数2的值添加到参数1中,然后将参数1的值赋值给需要赋值的变量,说明assign这个方法实现的是浅复制,如果需要使值不发生改变,可以给第一个参数传一个空对象

  1. let p4 = Object.assign({},p1,p2);
  2. p4//{ name: 'zs', age: 15 }

如果源对象中的对象存在嵌套关系,进行浅拷贝

  1. let o1 = { a: { age: 1 } }
  2. let o2 = Object.assign({ }, o1)
  3. console.log(o1 === o2);//false
  4. o1.a.age = 15;
  5. console.log(o1.a.age);//15
  6. console.log(o2.a.age);//15

6.3.3 Object.setPrototypeOf(obj,prototype)和getPrototypeOf(obj)

setPrototypeOf:设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null

getPrototypeOf:获取指定对象的原型

参数:

​ obj 要设置其原型的对象

​ prototype 该对象的新原型

  1. let prototype = {
  2. foo() {
  3. console.log('我是foo');
  4. },
  5. boo() {
  6. console.log('boo');
  7. }
  8. }
  9. let obj = { };
  10. Object.setPrototypeOf(obj, prototype);//给obj指定新原型
  11. obj.foo();
  12. console.log(obj.__proto__ === prototype);//true
  13. console.log(Object.getPrototypeOf(obj));//{ foo: [Function: foo], boo: [Function: boo] }

6.3.4 对象转为数组,数组转为对象

Object.keys():该⽅法返回⼀个数组,成员是参数对象⾃身的(不含继承的)所有可遍历(enumerable)属性的键名。

Object.values() :该⽅法返回⼀个数组,成员是参数对象⾃身的(不含继承的)所有可遍历(enumerable)属性的键值。

Object.entries():该⽅法返回⼀个数组,成员是参数对象⾃身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。

Object.fromEntries():该⽅法是entries的逆操作,⽤于将⼀个键值对数组转为对象。

  1. let obj = {
  2. name: 'zs',
  3. age: 15
  4. }
  5. var fromobj = Object.entries(obj);
  6. console.log(Object.keys(obj));//[ 'name','age' ]
  7. console.log(Object.values(obj));//[ 'zs', 15 ]
  8. console.log(Object.entries(obj));//[ [ 'name', 'zs' ], [ 'age', 15 ] ]
  9. console.log(Object.fromEntries(fromobj));//{ name: 'zs', age: 15 }

7、数值拓展

parseInt

parse:相当于解析,要想起解析字符串

静态方法:

Number.isNaN

Number.isFinite(0.8)//true

//判断是否为整数

Number.isInteger(2)//true

8、数组拓展

待更新~

发表评论

表情:
评论列表 (有 0 条评论,440人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6基础语法----解构

    目录 解构 1.数组解构 等号左边的变量放到中括号内部,匹配右侧数组中的元素。 2.对象解构 3 字符串解构 4数值解构 可以获取到数值包装器构造函数原型中指定的方

    相关 ES6语法

    ES6语法 ES6的相关概念 ECMAScript 2016,就是一个语法的规范,想比之前,更加的灵活,更加的方便 ES6新增的语法 let关键字 作

    相关 Es6语法

    1.var要比let的位高,作用域要大 2.let的作用范围很小很小 3.若果在函数内定义一个var变量,在函数外是不能被访问的. function user()

    相关 1.es6基础语法

    啦啦啦,终于可以忙里偷闲学学其他东西。在工作的两个多月里,从对微信小程序一概不知到可以熟练调用其API和布局样式还是很有收获的。大佬昨天问我“你觉得有什么收获,是不是前端已经没