是";这";真的是Javascript中的关键字吗?

是";这";真的是Javascript中的关键字吗?,javascript,this,Javascript,This,在添加最后一个属性之前,我有一段工作代码。我知道javascript中存在的问题。但这是我以前从未遇到过的事情 var name = "John Dane"; var age = 24; var person = { id: 'emp133y1998', name, age, forEach: function(action) { for (var prop in this) { if(prop === 'forEach') continue; ac

在添加最后一个属性之前,我有一段工作代码。我知道javascript中存在的问题。但这是我以前从未遇到过的事情

var name = "John Dane";
var age = 24;

var person = {
  id: 'emp133y1998',
  name, age,
  forEach: function(action) {
    for (var prop in this) {
      if(prop === 'forEach') continue;
      action(this[prop]);
    }
  },
  this: name +" "+ age
};

person.forEach(e => say(e));

如果
是关键字,我们如何将其用作属性名称。更奇怪的是,我实际上可以访问它。但不幸的是,我的
forEach
方法在此之后崩溃了。所以我把它拿走了。我还在学习阶段。有人能解释一下这里到底发生了什么吗?

这是一个保留关键字规范

该语言允许您使用括号语法声明带有保留关键字的属性名称,或者不使用@squint提到的保留关键字


注意:从ES5开始,不支持直接使用保留字

适用于浏览器环境的示例:

//此代码适用于ES5之前及以后的版本
//此括号语法可最大限度地提高代码的可移植性
var obj={};
obj['this']=“你好,我是这里”;//括号语法
obj['for']=“你好,我是for';
警报(obj[‘this’);

警报(obj[‘代表’)是,这是一个关键字,不,你不应该尝试使用它作为它的预期用途以外的任何东西,因为它是一个关键字对你可以用它做什么没有影响。关键字是由规范定义的,你能做什么或不能做什么都是由同一个规范定义的。没有任何东西普遍要求对关键字的使用有任何特定的限制。这都是语言语义学。因此,简而言之,您可以使用关键字作为属性名称,因为规范中说So.code适用于me@dandavis我正在使用node,但它不工作!也许我还不确定。@斜视我没有冒犯你。但我认为任何语言都不允许使用像identifier这样的关键字。他们被保留是有原因的!javascript也不例外。我的代码出现了不同的问题,现在我明白了。实际上,它在浏览器中工作,但我使用的是它断开的节点。可能
引用已更改。不过这只是猜测,我不确定。还有一件事我刚刚意识到,对象的所有属性实际上都是键,也就是字符串键,在字符串中,编译器不会干涉任何允许的东西。毕竟,javascript中的对象只不过是
key:value
==
“key”:value
对。当我看到JSON时,我想到了这个想法!使用关键字作为属性名不需要括号语法<代码>obj.this
obj.for
将只起作用。从ES5开始就不支持使用保留字。对于代码可移植性,括号表示法有帮助:)-我对我的答案进行了编辑。谢谢你的评论,这是真的。可能不是OP的问题,因为ES6功能已经在使用。ES3正在成为遥远的记忆。