繁体   English   中英

javascript JSON和Array元素,可帮助我了解有关引号的规则

[英]javascript JSON and Array elements, help me understand the rule about quotes

当使用返回值确定数组中元素的数量时,javascript是否在其周围引起引号?

范例:

这可以计算使用唯一字符的次数。

var uniques = {};

function charFreq(s)
{ 
    for(var i = 0; i < s.length; i++)
    {
       if(isNaN(uniques[s.charAt(i)])) uniques[s.charAt(i)] = 1;
       else uniques[s.charAt(i)] = uniques[s.charAt(i)] + 1;
    }

    return uniques;    
}

console.log(charFreq("ahasdsadhaeytyeyeyehahahdahsdhadhahhhhhhhhhha"));

唯一性[s.charAt(i)]有效,而唯一性[a]无效(由于缺少引号)似乎很可笑。 uniques [a]会让您讨厌“ a is undefined”。

使用[]表示法访问JavaScript对象时,您是在对象中使用字符串作为键。 您也可以使用来处理属性. 符号:

uniques.auniques.a uniques['a']

您没有在s.charAt(i)添加引号的原因是它返回一个string ,然后将该字符串用作检查uniques对象的属性。

uniques[a]会产生错误,因为尚未定义名称为a 变量

在第一个版本中uniques[s.charAt(i)] -您正在使用表达式进行查找。 JavaScript对表达式s.charAt(i)进行求值,并使用求值(可能a )在uniques映射中执行查找。

在第二个版本( uniques[a] ,您希望使用文字字符a进行查找,但是除非将其用引号引起来,否则JavaScript会将a视为表达式而不是文字。 当它尝试评估“表达式”时,您会得到一个错误。

因此规则是:字符/字符串文字需要用引号引起来; 计算为字符/字符串的表达式则不然。

这是Javascript评估[]之间的表达式的方式,例如uniques[s.charAt(i)] ,其类型为MemberExpression [Expression]

  1. propertyNameReference为计算Expression的结果。
  2. propertyNameValueGetValue(propertyNameReference)
  3. propertyNameStringToString(propertyNameValue)

因此,在第三步中,它将属性名称转换为字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM