TypeScript类构造函数参数属性的顺序是否受Object.keys保证?
类实例通过Object.keys获取的键顺序是否有保证?
结论:在现代JavaScript/TypeScript环境中,类构造函数的公开参数属性生成的实例,通过Object.keys()获取的键顺序是有保证的,与参数声明的顺序完全一致。
具体解释:
- 类的公开参数属性是语法糖,编译后会在构造函数内按参数声明的顺序,依次将值赋值给实例的对应属性,等价于手动编写如下代码:
class Cat { constructor(name, age, color) { this.name = name; this.age = age; this.color = color; } } - 根据ECMAScript 2015及后续规范,对象的自有可枚举字符串属性的遍历顺序,严格遵循属性的创建顺序。这里的
name、age、color是按参数顺序依次添加到实例上的,因此Object.keys()的返回顺序必然与参数声明顺序一致。
验证示例:
class Cat { constructor( public name: string, public age: number, public color: string ) {} } const sophie = new Cat('Sophie', 17, 'black'); console.log(Object.keys(sophie)); // 稳定输出:['name', 'age', 'color']
注:此行为仅在支持ES2015+的现代环境中有效,旧环境(如IE)不遵循该规范。
内容的提问来源于stack exchange,提问作者Sasgorilla
相关产品推荐
相关产品推荐

