声明后如何判断一个 ES6 值是否为 var / const / let? [重复]

问题描述 投票:0回答:4

我知道我可以通过查看声明的位置来确定值是

var
const
还是
let
。但是我想知道 - 主要是为了调试、开发 JS 编译器和学术兴趣 - 是否有可能在创建变量(var / const / let-ness)后找出它的不变性/范围。

doThing(something)

会回来

let

或同等学历。就像我们可以用

typeof
something.constructor.name
为构造函数确定类型。

javascript constants let
4个回答
10
投票

您可以在与变量相同的函数中使用直接

let
来区分
const
var
eval

let a;

try {
    eval('var a');
    // it was undeclared or declared using var
} catch (error) {
    // it was let/const
}

正如@JonasWilms 之前所写,您可以通过尝试分配来区分

let
const

{
  let x = 5;
  let isConst = false;
  
  try {
    x = x;
  } catch (err) {
    isConst = true;
  }
  
  console.log(isConst ? 'const x' : 'let x');
}

{
  const x = 5;
  let isConst = false;
  
  try {
    x = x;
  } catch (err) {
    isConst = true;
  }
  
  console.log(isConst ? 'const x' : 'let x');
}


1
投票

let 和var 只是关于作用域的,所以不可能。因为 JavaScript 不通过引用传递,如果你要将一个变量传递给一个函数,你将失去“常量”和范围——在该函数上,变量将只是一个局部范围的变量。所以我的想法是:这是不可能的。


1
投票

您不能以任何方式直接访问环境记录链,因此您无法判断是否声明了变量。

with
语句可能使您能够缩小声明变量的范围,因为它允许您将代理添加为环境记录,但这只能提供一些见解,并且通常是一件非常危险的事情。


0
投票

我曾经这样做过,但有点老套...

我创建一个变量并尝试更改它,如果它抛出错误,那么它就是一个常量变量。

我创建一个变量并尝试在

{}
大括号上更改它,如果值不同那么它最初创建那么它是一个 var,如果不是那么它是一个 let 变量。

© www.soinside.com 2019 - 2024. All rights reserved.