我正在寻找如何检查 JavaScript 中的变量是否是数组,但是当 SO 页面加载时,我想到了问题的解决方案。浏览答案,我发现他们都没有想到这个简单的答案:只需检查我们需要在数组上使用的方法,以便它仍然适用于实现相同方法的任何用户定义类型。作为一个乐于助人的人,我想我应该为 future 尝试解决同样问题的人提交我的答案。但是经过测试,我发现它不起作用。
function print(object) {
if ('map' in object) { // If the object implements map, treat it like an array
object.map(function(current) {
console.log(current);
});
} else { // Otherwise, treat it as a string
console.log(object);
}
}
现在,当我使用数组调用它时,它工作得很好,但如果我使用字符串,它就会失败。既然字符串是 javascript 中的对象,为什么 'in' 关键字不能对它们起作用呢?有没有像现在这样简单的方法来实现这个?
最佳答案
您可以访问该属性并测试其类型:
if (object != null && typeof object.map === 'function')
object.map(...);
// ...
<小时/>
Since strings are objects in javascript, why shouldn't the 'in' keyword work for them?
不完全是。 primitive string value 之间存在差异。和一个String
instance object .
typeof "foo"; // "string"
typeof new String(); // "object"
原始值本身没有属性,这就是为什么 in
运算符在使用它们时会抛出 Error
。然而,它们将被属性访问器临时装箱到对象中:
var a = "foo";
a.bar = 'bar'; // no error, but...
console.log(a.bar); // undefined
String.prototype.baz = function () {
return this + this;
};
console.log(a.baz()); // "foofoo"
关于javascript - 当对象可能是字符串时使用 'in',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23440258/