爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Es6-对象新增了哪些扩展?

      首页 知识中心 软件开发 文章详情页

      Es6-对象新增了哪些扩展?

      2025-02-21 08:56:02 阅读次数:9

      Object,函数,参数,对象,属性,遍历,默认值

      Es6-对象新增了哪些扩展?

      一、参数

      ES6允许为函数的参数设置默认值

      function log(x, y = 'World') {
        console.log(x, y);
      }
      ​
      console.log('Hello') // Hello World
      console.log('Hello', 'China') // Hello China
      console.log('Hello', '') // Hello

      函数的形参是默认声明的,不能使用let或const再次声明

      function foo(x = 5) {
          let x = 1; // error
          const x = 2; // error
      }

      参数默认值可以与解构赋值的默认值结合起来使用

      function foo({x, y = 5}) {
        console.log(x, y);
      }
      ​
      foo({}) // undefined 5
      foo({x: 1}) // 1 5
      foo({x: 1, y: 2}) // 1 2
      foo() // TypeError: Cannot read property 'x' of undefined

      上面的foo函数,当参数为对象的时候才能进行解构,如果没有提供参数的时候,变量x和y就不会生成,从而报错,这里设置默认值避免

      function foo({x, y = 5} = {}) {
        console.log(x, y);
      }
      ​
      foo() // undefined 5

      参数默认值应该是函数的尾参数,如果不是非尾部的参数设置默认值,实际上这个参数是没发省略的

      function f(x = 1, y) {
        return [x, y];
      }
      ​
      f() // [1, undefined]
      f(2) // [2, undefined]
      f(, 1) // 报错
      f(undefined, 1) // [1, 1]

      二、属性

      函数的length属性

      length将返回没有指定默认值的参数个数

      (function (a) {}).length // 1
      (function (a = 5) {}).length // 0
      (function (a, b, c = 5) {}).length // 2

      rest 参数也不会计入length属性

      (function(...args) {}).length // 0

      如果设置了默认值的参数不是尾参数,那么length属性也不再计入后面的参数了

      (function (a = 0, b, c) {}).length // 0
      (function (a, b = 1, c) {}).length // 1

       

      name属性

      返回该函数的函数名

      var f = function () {};
      
      // ES5
       // ""
      
      // ES6
       // "f"

      如果将一个具名函数赋值给一个变量,则 name属性都返回这个具名函数原本的名字

      const bar = function baz() {};
       // "baz"
      Function构造函数返回的函数实例,name属性的值为anonymous
      
      (new Function).name // "anonymous"
      bind返回的函数,name属性值会加上bound前缀
      
      function foo() {};
      foo.bind({}).name // "bound foo"
      
      (function(){}).bind({}).name // "bound "

       

      三、作用域

      一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域

      等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的

      下面例子中,y=x会形成一个单独作用域,x没有被定义,所以指向全局变量x

      let x = 1;
      
      function f(y = x) { 
        // 等同于 let y = x  
        let x = 2; 
        console.log(y);
      }
      
      f() // 1

       

      四、严格模式

      只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错

      // 报错
      function doSomething(a, b = a) {
        'use strict';
        // code
      }
      
      // 报错
      const doSomething = function ({a, b}) {
        'use strict';
        // code
      };
      
      // 报错
      const doSomething = (...a) => {
        'use strict';
        // code
      };
      
      const obj = {
        // 报错
        doSomething({a, b}) {
          'use strict';
          // code
        }
      };

      五、箭头函数

      使用“箭头”(=>)定义函数

      var f = v => v;
      
      // 等同于
      var f = function (v) {
        return v;
      };

      如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分

      var f = () => 5;
      // 等同于
      var f = function () { return 5 };
      
      var sum = (num1, num2) => num1 + num2;
      // 等同于
      var sum = function(num1, num2) {
        return num1 + num2;
      };

      如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回

      var sum = (num1, num2) => { return num1 + num2; }

      如果返回对象,需要加括号将对象包裹

      let getTempItem = id => ({ id: id, name: "Temp" });

      注意点:

      • 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象

      • 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误

      • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替

      • 不可以使用yield命令,因此箭头函数不能用作 Generator 函数

      1、属性的简写

      ES6中,当对象键名与对应值名相等的时候,可以进行简写

      const baz = {foo:foo}
      ​
      // 等同于
      const baz = {foo}

      方法也能够进行简写

      const o = {
        method() {
          return "Hello!";
        }
      };
      ​
      // 等同于
      ​
      const o = {
        method: function() {
          return "Hello!";
        }
      }

      在函数内作为返回值,也会变得方便很多

      function getPoint() {
        const x = 1;
        const y = 10;
        return {x, y};
      }
      ​
      getPoint()
      // {x:1, y:10}

      注意:简写的对象方法不能用作构造函数,否则会报错

      const obj = {
        f() {
          this.foo = 'bar';
        }
      };
      ​
      new obj.f() // 报错

       

      2、属性名表达式

      ES6 允许字面量定义对象时,将表达式放在括号内

      let lastWord = 'last word';
      ​
      const a = {
        'first word': 'hello',
        [lastWord]: 'world'
      };
      ​
      a['first word'] // "hello"
      a[lastWord] // "world"
      a['last word'] // "world"

      表达式还可以用于定义方法名

      let obj = {
        ['h' + 'ello']() {
          return 'hi';
        }
      };
      ​
      obj.hello() // hi

      注意,属性名表达式与简洁表示法,不能同时使用,会报错

      // 报错
      const foo = 'bar';
      const bar = 'abc';
      const baz = { [foo] };
      ​
      // 正确
      const foo = 'bar';
      const baz = { [foo]: 'abc'};

      注意,属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object]

      const keyA = {a: 1};
      const keyB = {b: 2};
      ​
      const myObject = {
        [keyA]: 'valueA',
        [keyB]: 'valueB'
      };
      ​
      myObject // Object {[object Object]: "valueB"}

       

      3、super关键字

      this关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原型对象

      const proto = {
        foo: 'hello'
      };
      ​
      const obj = {
        foo: 'world',
        find() {
          return super.foo;
        }
      };
      ​
      Object.setPrototypeOf(obj, proto); // 为obj设置原型对象
      obj.find() // "hello"

       

      4、扩展运算符的应用

      在解构赋值中,未被读取的可遍历的属性,分配到指定的对象上面

      let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
      x // 1
      y // 2
      z // { a: 3, b: 4 }

      注意:解构赋值必须是最后一个参数,否则会报错

      解构赋值是浅拷贝

      let obj = { a: { b: 1 } };
      let { ...x } = obj;
      obj.a.b = 2; // 修改obj里面a属性中键值
      x.a.b // 2,影响到了结构出来x的值

      对象的扩展运算符等同于使用Object.assign()方法

       

      5、属性的遍历

      ES6 一共有 5 种方法可以遍历对象的属性。

      • for...in:循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)

      • Object.keys(obj):返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名

      • Object.getOwnPropertyNames(obj):回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名

      • Object.getOwnPropertySymbols(obj):返回一个数组,包含对象自身的所有 Symbol 属性的键名

      • Reflect.ownKeys(obj):返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举

      上述遍历,都遵守同样的属性遍历的次序规则:

      • 首先遍历所有数值键,按照数值升序排列

      • 其次遍历所有字符串键,按照加入时间升序排列

      • 最后遍历所有 Symbol 键,按照加入时间升序排

      Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
      // ['2', '10', 'b', 'a', Symbol()]

       

       

      六、对象新增的方法

      关于对象新增的方法,分别有以下:

      • Object.is()

      • Object.assign()

      • Object.getOwnPropertyDescriptors()

      • Object.setPrototypeOf(),Object.getPrototypeOf()

      • Object.keys(),Object.values(),Object.entries()

      • Object.fromEntries()

       

      Object.is()

      严格判断两个值是否相等,与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身

      +0 === -0 //true
      NaN === NaN // false
      ​
      Object.is(+0, -0) // false
      Object.is(NaN, NaN) // true

       

      Object.assign()

      Object.assign()方法用于对象的合并,将源对象source的所有可枚举属性,复制到目标对象target

      Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象

      const target = { a: 1, b: 1 };
      ​
      const source1 = { b: 2, c: 2 };
      const source2 = { c: 3 };
      ​
      Object.assign(target, source1, source2);
      target // {a:1, b:2, c:3}

      注意:Object.assign()方法是浅拷贝,遇到同名属性会进行替换

       

      Object.getOwnPropertyDescriptors()

      返回指定对象所有自身属性(非继承属性)的描述对象

      const obj = {
        foo: 123,
        get bar() { return 'abc' }
      };
      ​
      Object.getOwnPropertyDescriptors(obj)
      // { foo:
      //    { value: 123,
      //      writable: true,
      //      enumerable: true,
      //      configurable: true },
      //   bar:
      //    { get: [Function: get bar],
      //      set: undefined,
      //      enumerable: true,
      //      configurable: true } }

       

      Object.setPrototypeOf()

      Object.setPrototypeOf方法用来设置一个对象的原型对象

      Object.setPrototypeOf(object, prototype)
      ​
      // 用法
      const o = Object.setPrototypeOf({}, null);

       

      Object.getPrototypeOf()

      用于读取一个对象的原型对象

      Object.getPrototypeOf(obj);

       

      Object.keys()

      返回自身的(不含继承的)所有可遍历(enumerable)属性的键名的数组

      var obj = { foo: 'bar', baz: 42 };
      Object.keys(obj)
      // ["foo", "baz"]

       

      Object.values()

      返回自身的(不含继承的)所有可遍历(enumerable)属性的键对应值的数组

      const obj = { foo: 'bar', baz: 42 };
      Object.values(obj)
      // ["bar", 42]

       

      Object.entries()

      返回一个对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对的数组

      const obj = { foo: 'bar', baz: 42 };
      Object.entries(obj)
      // [ ["foo", "bar"], ["baz", 42] ]

       

      Object.fromEntries()

      用于将一个键值对数组转为对象

      Object.fromEntries([
        ['foo', 'bar'],
        ['baz', 42]
      ])
      // { foo: "bar", baz: 42 }
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://qingshan09.blog.csdn.net/article/details/138949949,作者:前端青山,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:vue3-组合式API

      下一篇:【RDMA】RDMA编程和TCP编程的区别|bRPC

      相关文章

      2025-05-19 09:04:44

      js小题2:构造函数介绍与普通函数对比

      js小题2:构造函数介绍与普通函数对比

      2025-05-19 09:04:44
      new , 关键字 , 函数 , 对象 , 构造函数
      2025-05-19 09:04:30

      【Canvas技法】辐射式多道光影的实现

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30
      代码 , 函数 , 实现
      2025-05-19 09:04:22

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22
      使用 , 函数 , 初始化 , 定义 , 对象
      2025-05-19 09:04:22

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      2025-05-19 09:04:22
      对象 , 温度
      2025-05-19 09:04:14

      二叉树经典OJ练习

      二叉树经典OJ练习

      2025-05-19 09:04:14
      root , 二叉树 , 子树 , 节点 , 遍历
      2025-05-19 09:04:14

      C语言字符函数和字符串函数--(超全超详细)

      C语言字符函数和字符串函数--(超全超详细)

      2025-05-19 09:04:14
      函数 , 字符 , 字符串
      2025-05-16 09:15:24

      如何将一串数字用函数的方法倒过来(C语言)

      如何将一串数字用函数的方法倒过来(C语言)

      2025-05-16 09:15:24
      函数 , 数字 , 数组
      2025-05-16 09:15:24

      jQuery遍历对象、数组、集合

      jQuery遍历对象、数组、集合

      2025-05-16 09:15:24
      jQuery , 对象 , 数组 , 遍历 , 集合
      2025-05-16 09:15:17

      多源BFS问题(1)_01矩阵

      多源BFS问题(1)_01矩阵

      2025-05-16 09:15:17
      lt , 矩阵 , 遍历
      2025-05-16 09:15:10

      【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

      【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

      2025-05-16 09:15:10
      结点 , 递归 , 遍历 , 链表 , 题目
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5274654

      查看更多

      最新文章

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      2025-05-19 09:04:22

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22

      C语言字符函数和字符串函数--(超全超详细)

      2025-05-19 09:04:14

      如何将一串数字用函数的方法倒过来(C语言)

      2025-05-16 09:15:24

      【C/C++算法】蓝桥杯之递归算法(如何编写想出递归写法)

      2025-05-16 09:15:10

      查看更多

      热门文章

      游戏编程之十一 图像页CPICPAGE介绍

      2022-11-28 01:25:04

      Python 函数调用父类详解

      2023-04-23 09:44:31

      游戏编程之六 游戏编程的特点

      2024-09-25 10:13:46

      C#8.0新语法

      2023-02-07 10:34:04

      实现远程线程DLL注入

      2023-05-04 08:57:15

      Python----map,filter,reduce,zip,lambda的使用方法

      2023-04-28 02:17:08

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【jQuery】jQuery中$.get、$.post、$.getJSON和$.ajax用法的区别

      ES5新增方法

      一篇文章告诉你JavaScript 如何实现继承

      Java为什么设计成 String 不能用 == 来进行比较

      Python 为什么要保留显式的 self ?

      JavaScript-Object函数

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号