Javascript 使用';在';当对象可能是字符串时
我正在查找如何检查JavaScript中的变量是否是数组,但在加载SO页面时,我想到了解决问题的方法。通过查看答案,我发现他们中没有人想到这个简单的答案:只需检查我们需要在数组上使用的方法,以便它仍然适用于实现相同方法的任何用户定义类型。作为一个乐于助人的人,我想我会把我的答案提交给未来试图解决同样问题的人。但是经过测试,我发现它不起作用Javascript 使用';在';当对象可能是字符串时,javascript,Javascript,我正在查找如何检查JavaScript中的变量是否是数组,但在加载SO页面时,我想到了解决问题的方法。通过查看答案,我发现他们中没有人想到这个简单的答案:只需检查我们需要在数组上使用的方法,以便它仍然适用于实现相同方法的任何用户定义类型。作为一个乐于助人的人,我想我会把我的答案提交给未来试图解决同样问题的人。但是经过测试,我发现它不起作用 function print(object) { if ('map' in object) { // If the object implements m
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(...);
// ...
既然字符串是javascript中的对象,为什么“in”关键字不适用于它们 不完全是。a和a之间有区别 基元值本身没有属性,这就是为什么
in
操作符在对它们使用时抛出错误的原因。但是,它们将由属性访问器临时装箱到对象中:
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"
我想你可以这样做:
var y = function (o) {
if (typeof o != "string" && "map" in o)
console.log("not a string"); //your code here
else
console.log("It's a string!"); //your code here
}
我用var x=“hello”
对其进行了测试,结果成功了。由于JavaScript中的&&
短路,它将在类型为o!=“string”
,这很好,因为o
中的映射对于string
s失败。注意有意使用小写字母,这是用于原语的<代码>字符串
s是对象。我不确定这是否是您的目标。执行此操作:if(“对象(Object)”中的“映射”){…
任何原语都将转换为其对象包装器类型。^^这很简单,我喜欢它。我必须说,虽然更可靠的方法是查看对象是否是数组。但只要它们实现了map,我真的应该关心它是否真的是数组吗?取决于找到的.map
是什么和做什么。你是在假设它'将是一个函数。即使它是,它也可能是一个执行意外操作的函数。但可能性不大。
var y = function (o) {
if (typeof o != "string" && "map" in o)
console.log("not a string"); //your code here
else
console.log("It's a string!"); //your code here
}