在javascript中。如何测试变量是否等于function Number()
或function String()
。
我从类型被设置为属性的模式定义中读取反应道具。因此,this.props.fieldType
是function Number()
或function String()
。
我试过了:
if(this.props.fieldType instanceof Number)
和
if(Object.getPrototypeOf(this.props.fieldType) === Number.prototype)
根据 instanceof description但这不起作用。不知道为什么。
答案 0 :(得分:4)
尝试检查该属性的值
function Number()
是否为function String()
如果您的字面意思是功能 Number
或String
,请使用==
(或===
):
if (this.props.fieldType === Number) {
如果您的意思是“它是一个数字”还是“它是一个字符串”,请使用typeof
,而不是instanceof
:
if (typeof this.props.fieldType === "number") {
如果您的意思是“它是通过新Number
创建的对象”(这真的很不寻常),那么instanceof
就是您想要的:
if (this.props.fieldType instanceof Number) {
三者的例子:
var props = {
numberFunction: Number,
number: 42,
numberObject: new Number(42)
};
console.log(props.numberFunction === Number);
console.log(typeof props.number === "number");
console.log(props.numberObject instanceof Number);
您提到了与instanceof
相关的getPrototypeOf
和相等比较。了解那些是非常不同的东西是很重要的。
instanceof
检查对象(左侧操作数)是否具有该函数的当前prototype
属性(右侧操作数)其中原型链。它可能不是对象的直接原型;它可能会进一步下降。例如:
function Thing() {
}
var t = new Thing();
// The following is true, Object.prototype is in t's prototype chain
console.log(t instanceof Object);
// The following is false, t's prototype isn't Object.prototype;
// Object.prototype is further down t's prototype chain
console.log(Object.getPrototypeOf(t) === Object.prototype);
答案 1 :(得分:0)
当然,下划线的方式更有效率,但是当效率不是问题时,检查的最佳方法是
function isFunctionA(object) {
return object && getClass.call(object) == '[object Function]';
}
因此,最终的isFunction函数如下:
function isFunction(functionToCheck) {
var getType = {};
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}