[英]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.a
与uniques.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] :
因此,在第三步中,它将属性名称转换为字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.