Javascript !instanceof If Statement

前端 未结 3 1258
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-12 21:11

This is a really basic question really just to satisfy my curiosity, but is there a way to do something like this:

if(obj !instanceof Array) {
    //The obje         


        
相关标签:
3条回答
  • 2020-12-12 21:56
    if (!(obj instanceof Array)) {
        // do something
    }
    

    Is the correct way to check for this - as others have already answered. The other two tactics which have been suggested will not work and should be understood...

    In the case of the ! operator without brackets.

    if (!obj instanceof Array) {
        // do something
    }
    

    In this case, the order of precedence is important (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). The ! operator precedes the instanceof operator. So, !obj evaluated to false first (it is equivalent to ! Boolean(obj)); then you are testing whether false instanceof Array, which is obviously negative.

    In the case of the ! operator before the instanceof operator.

    if (obj !instanceof Array) {
        // do something
    }
    

    This is a syntax error. Operators such as != are a single operator, as opposed to a NOT applied to an EQUALS. There is no such operator as !instanceof in the same way as there is no !< operator.

    0 讨论(0)
  • 2020-12-12 22:06

    Enclose in parentheses and negate on the outside.

    if(!(obj instanceof Array)) {
        //...
    }
    

    In this case, the order of precedence is important (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). The ! operator precedes the instanceof operator.

    0 讨论(0)
  • 2020-12-12 22:09

    It is easy to forget the parenthesis (brackets) so you can make a habit of doing:

    if(obj instanceof Array === false) {
        //The object is not an instance of Array
    }
    

    or

    if(false === obj instanceof Array) {
        //The object is not an instance of Array
    }
    

    Try it here

    0 讨论(0)
提交回复
热议问题