如何检查变量是否为类型函数Number()或函数String()js

时间:2016-11-08 11:38:38

标签: javascript

在javascript中。如何测试变量是否等于function Number()function String()

我从类型被设置为属性的模式定义中读取反应道具。因此,this.props.fieldTypefunction Number()function String()

我试过了:

 if(this.props.fieldType instanceof Number)

if(Object.getPrototypeOf(this.props.fieldType) === Number.prototype)

根据 instanceof description但这不起作用。不知道为什么。

2 个答案:

答案 0 :(得分:4)

  

尝试检查该属性的值function Number()是否为function String()

如果您的字面意思是功能 NumberString,请使用==(或===):

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]';
}