类型检查不起作用

时间:2018-02-13 10:51:11

标签: javascript error-handling typechecking

Object.prototype.search = function() {

    if (!(Array.isArray(this) || typeof this === 'object' || this === 'undefined')) {

        throw {
            number: 1,
            err: 'test error'
        }
    }

    var count = 0

    for (item in this) {

        if (typeof this[item] !== 'undefined' || (typeof this[item] !== 'string' && typeof this[item] !== 'number' ) ){
            count++
        }
    }

    return count - 1

}

array1 = ['x', , , 'x', , , 'x', 1, , , , , , 7, 8]

try {

    console.log(array2.search())
}

catch (e) {

    console.log('error ' + e.number)
}

是的,我知道array2不存在

返回'错误未定义' Typechecking不存在的array2对象不会触发throw?

如何在原型方法中捕获错误?

2 个答案:

答案 0 :(得分:0)

您应该将array2替换为array1。

Object.prototype.search = function() {
  if (!Array.isArray(this) || typeof this === 'object' || this === undefined) {
    throw {
      number: 1,
      err: 'test error'
    }
  }
  var count = 0
  for (item in this) {
    if (typeof this[item] !== undefined) {
      count++
    }
  }
  return count - 1
}

array1 = ['x', , , 'x', , , 'x', 1, , , , , , 7, 8];
try {
  console.log(array1.search());
} catch (e) {
  console.log('error ' + e.number)
}

答案 1 :(得分:0)

它返回error undefined,因为您正在创建一个名为array1的数组,但在名为search的未定义变量上使用您的array2函数。