为什么var result = typeof-“ Hello,World”;返回数字而不是异常?

时间:2019-09-13 16:43:53

标签: javascript typescript

在此示例中,为什么有typeof返回编号?

class MyClass{}

var result = typeof - "Hello, World";
// -----------------^
console.log(result);
// number  -- for me, it's not logic

var result2 = typeof + new MyClass();
// ------------------^
console.log(result2);
// number  -- for me, it's not logic

但是在这种情况下:

var str = - new MyClass();
// NaN -- why not an exception

var str = - "some strings";
// NaN -- why not an exception

var result2 = typeof -24;
console.log(result2);
// number  -- logic because its a number

也许某些情况是逻辑上的,但我的问题是,为什么在第一和第二个示例中,打字稿返回 number 作为结果,逻辑上结果应为“ object”,“ undefined”, “ NaN”,甚至引发异常,就像本例一样:

var result2 = typeof % 'Hello, World';

但不是数字

我尝试搜索文档,但没有解释。

这是一个错误吗?

2 个答案:

答案 0 :(得分:3)

var result = typeof - "Hello, World";

此代码的含义是:

  • 将一元求反运算符-应用于"Hello, World"
  • 其结果是NaN
  • typeof运算符应用于值NaN
  • 其结果是"number"

“为什么JavaScript不抛出更多异常?”是一个哲学问题,除了“它的设计师认为这样会更好”之外,实际上并没有一个具体的答案。

答案 1 :(得分:2)

因为NaNnumber

const nantype = typeof NaN;
console.info(nantype);