我想知道是否有任何方法可以覆盖typeof
运算符的行为。具体来说,我想在typeof
和foo = "hi"
同时调用bar = new String("hi")
运算符时返回“字符串”。
typeof bar
返回“object”但我希望它返回“string”。
我知道这可以通过声明我自己的函数或访问构造函数名来完成,但我想修改typeof
运算符的行为。
编辑 - 我正在寻找一些我可以在程序开头添加的代码,它修改了程序其余部分中所有类型操作符的行为。
答案 0 :(得分:4)
这是不可能的。本机操作符的行为无法更改。
相关链接:
typeof
的现有功能,但可以让您定义自己的其他类型。答案 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');
。