使用字符串"构造器"JavaScript对象中的关键字
Using string "constructor" as key in JavaScript object
我正在做一个练习JavaScript,我已经卡住了。练习是创建一个循环遍历字符串的函数,然后创建一个对象,每个单词作为键,并将该单词出现的次数作为相应的值。简单的对吧?好了,现在我被困在后面的一个步骤上了,输入字符串包含了"constructor"这个词你需要把它作为键放入对象中。下面是我到目前为止的代码,以及测试它的Jasmine规范:
function words(words){
count = {};
splits = words.split(" ");
for(var i = 0; i < splits.length; i++){
splits[i] = splits[i].replace(/[;:!&@$%'^,]/g, "").toLowerCase();
if([splits[i]] == ""){
continue;
}else if(count[splits.i] !== null){
count[splits[i]]++;
}else{
count[splits[i]] = 1;
}
}
return count;
};
words("constructor Constructor")
describe("words()", function() {
it("counts constructor", function() {
var expectedCounts = { constructor: 2 };
expect(words("constructor Constructor")).toEqual(expectedCounts);
});
});
问题是,在第二个条件中使用点或括号表示法,它的计算结果为true,因为"构造函数"是从对象原型中继承的,因此它试图增加NaN值。我试着找了个变通的办法,但一无所获。尽管我很喜欢JS,但它的继承有它的怪癖。在这种情况下,有没有任何方法可以防止继承,或者有人能想到的其他工作?
而不是比较null
,看看你是否已经在count
上设置了一个属性,使用hasOwnProperty
。hasOwnProperty
不包括来自原型链的属性,只包括直接在对象上的属性。
if (count.hasOwnProperty(splits[i])) {
count[splits[i]]++;
} else{
count[splits[i]] = 1;
}
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- delete关键字在全局变量上的不同行为
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- JavaScript 中的嵌套函数和 “this” 关键字
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- "这个“;javascript模块中的关键字
- "这个“;javascript回调函数中的关键字
- "这个“;javascript中的关键字(作为实例)
- "这个“;Object方法中的关键字指向Window