Changing the behaviour of the typeof operator in Javascript

前端 未结 4 588
灰色年华
灰色年华 2020-12-20 22:22

I would like to know if there is any way of overriding the behaviour of the typeof operator. Specifically, I want to return \"string\" when the typeof

相关标签:
4条回答
  • 2020-12-20 22:46

    No, you can't modify the behavior of typeof or any other operator for that matter. However the next best solution is to use Object.prototype.toString as follows:

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

    Now you can use it as follows (see the demo - http://jsfiddle.net/CMwdL/):

    var foo = "hi";
    var bar = new String("hi");
    
    alert(typeOf(foo)); // String
    alert(typeOf(bar)); // String
    

    The reason this works is given in the following link: http://bonsaiden.github.io/JavaScript-Garden/#types.typeof

    0 讨论(0)
  • 2020-12-20 22:47

    That is impossible. The behaviour of native operators cannot be changed.

    Related links:

    • Why hasn't operator overloading been added to ECMAScript? at quora.com
    • The ES value proxy proposal. It doesn't let you change the existing functionality of typeof, but would enable you to define your own additional types.
    0 讨论(0)
  • 2020-12-20 23:00

    You can't change a Javascript operator, however you can check if it's a string OR a string object with 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
    

    Of course, it is much more simple and shorter to create your own function, but if you want to use native JS, that is the way : alert(str instanceof String || typeof str == 'string');.

    0 讨论(0)
  • 2020-12-20 23:01

    typeof is an operator in JavaScript so I'm quite sure you can't. To detect if something is a string you could use something like this:

    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
    
    0 讨论(0)
提交回复
热议问题