相关疑难解决方法(0)

CoffeeScript Existential Operator和这个

我注意到CoffeeScript编译器有点奇怪,并且想知道这是否是正确的行为.如果它是正确的我很好奇为什么会有区别..

鉴于以下CoffeeScript:

if @myVar?
  alert myVar
Run Code Online (Sandbox Code Playgroud)

我期待它像这样编译成JavaScript:

if (typeof this.myVar !== "undefined" && this.myVar !== null) {
  alert(myVar);
}
Run Code Online (Sandbox Code Playgroud)

但相反,CoffeeScript编译器输出的是:

if (this.myVar != null) {
  alert(myVar);
}
Run Code Online (Sandbox Code Playgroud)

如果我不引用此(或任何其他父对象),CoffeeScript将按照我的预期进行编译.

这是正确的行为吗?如果是这样,为什么使用它时它会有所不同?

编辑:

添加一点澄清.仅在此情况下不会发生这种情况,而是对象的任何其他属性.例如,如果我用下面的内容替换上面的CoffeeScript,它仍然只用"!= null"编译...

if myVar.myProp?
  alert myVar
Run Code Online (Sandbox Code Playgroud)

coffeescript

11
推荐指数
1
解决办法
3554
查看次数

如何检查变量是未定义还是未在 javascript 中声明?

我知道要查找 javascript 中是否未声明变量,我可以使用if (typeof variable === 'undefined'). 如果我将变量声明为 undefined ( var variable = undefined),则 if 语句仍返回 true。在 JavaScript 中,是否有可能找到未声明的变量和值为 undefined 的变量之间的区别?我知道它们很相似,但是这样做const variable = undefined然后variable = "something else"会抛出错误,所以它们一定是不同的。

const variable = undefined

if (typeof variable === 'undefined') {
  console.log('"variable" is undefined')
}

if (typeof undeclaredVariable === 'undefined') {
  console.log('"undeclaredVariable" is undefined')
}
Run Code Online (Sandbox Code Playgroud)

我不想使用 try catch 块,因为我希望能够基于此分配另一个常量。我想要一个这样的解决方案:const isVariableDeclared = variable === undeclared,除非undeclared在 javascript 中不存在。我知道我可以将 let 与 try catch 块一起使用,但我正在寻找更优雅的东西。

javascript undefined detection undeclared-identifier

8
推荐指数
1
解决办法
839
查看次数