在Javascript中更改typeof运算符的行为

时间:2013-06-27 02:49:06

标签: javascript typeof

我想知道是否有任何方法可以覆盖typeof运算符的行为。具体来说,我想在typeoffoo = "hi"同时调用bar = new String("hi")运算符时返回“字符串”。

typeof bar返回“object”但我希望它返回“string”。

我知道这可以通过声明我自己的函数或访问构造函数名来完成,但我想修改typeof运算符的行为。

编辑 - 我正在寻找一些我可以在程序开头添加的代码,它修改了程序其余部分中所有类型操作符的行为。

4 个答案:

答案 0 :(得分:4)

这是不可能的。本机操作符的行为无法更改。

相关链接:

答案 1 :(得分:1)

typeof是JavaScript中的operator,所以我很确定你不能。要检测某些内容是否为字符串,您可以使用以下内容:

var s = "hello";
console.log(s.substr&&s.charAt&&s.toUpperCase==="".toUpperCase)//true
s = new String("hello");
console.log(s.substr&&s.charAt&&s.toUpperCase==="".toUpperCase)//true

答案 2 :(得分:0)

不,您无法修改typeof或任何其他运营商的行为。然而,下一个最佳解决方案是使用Object.prototype.toString,如下所示:

function typeOf(value) {
    return Object.prototype.toString.call(value).slice(8, -1);
}

现在您可以按照以下方式使用它(请参阅演示 - http://jsfiddle.net/CMwdL/):

var foo = "hi";
var bar = new String("hi");

alert(typeOf(foo)); // String
alert(typeOf(bar)); // String

其工作原因见以下链接:http://bonsaiden.github.io/JavaScript-Garden/#types.typeof

答案 3 :(得分:0)

您无法更改Javascript运算符,但是您可以检查它是字符串还是带有instanceof的字符串对象。

var strObj = new String('im a string')
var str = 'im a string'

alert(strObj instanceof String); //true
alert(typeof strObj == 'string'); //false
alert(str instanceof String); //false
alert(typeof str == 'string'); //true
alert(strObj instanceof String || typeof strObj == 'string'); //true
alert(str instanceof String || typeof str == 'string'); //true

当然,创建自己的函数要简单得多,但是如果你想使用原生JS,那就是:alert(str instanceof String || typeof str == 'string');