【问题标题】:Can javascript variables contain anything?javascript变量可以包含任何东西吗?
【发布时间】:2018-09-23 06:26:40
【问题描述】:

我知道它们可以包含原始数据类型和对象。而且由于我一直在进行 react 编程,因此我知道它们可以包含对象、组件甚至 json。 javascript变量有什么限制吗? var/const/let

【问题讨论】:

  • 函数和可能的组件都只是对象。 JSON 数据只是一个字符串。它们没有什么特别之处。
  • 它们不能包含河流,也不能包含欢乐的感觉。 Ir 说他们可以“包含 JSON” 是没有意义的,如果任何内容可以是字符串或只是常规数组/对象/值。但是它们可以引用 JS 中的任何值。
  • @jonrsharpe - 你有诗人的灵魂。

标签: javascript types


【解决方案1】:

任何 都可以存储在 JavaScript 变量中。价值包括:

  • 所有基元
  • 对象引用

在 JavaScript 中几乎所有东西都是对象。值得注意的是,函数是对象(包括 React 无状态功能组件 [SFC] 和 React 组件,它们是构造函数),因此变量可以包含对函数的引用:

function foo(msg) {
    console.log("foo: " + msg);
}
function bar(msg) {
    console.log("bar: " + msg);
}
const f = Math.random() < 0.5 ? foo : bar;
f("Hi");

您有 50/50 的机会在该代码中看到“foo: Hi”或“bar: Hi”。

我能想到变量不能包含的只有几件事:

  • 运营商。例如。这是无效的:

    // NOT VALID
    const op = Math.random() < 0.5 ? + : -;
    console.log(10 op 5);
    

    ...虽然用函数很容易达到同样的效果:

    const op = Math.random() < 0.5
               ? (a, b) => a + b
               : (a, b) => a - b;
    console.log(op(10, 5));
    
  • 执行上下文或词法环境,但这只是因为没有任何东西在代码中公开对它们的引用。

  • 内存位置,因为(再次)没有任何东西会在代码中公开它们。

...甚至是json

JSON 是一种用于数据交换的文本符号(More here.) 如果您正在处理 JavaScript 源代码,而不是处理 字符串,那么您就不是在处理 JSON。

【讨论】:

    【解决方案2】:

    变量是处理所有对象的方法。 JavaScript 是一种基于对象的语言(字符串、数字等都是具有不同原型的对象)。

    例如,var 可以包含:true、undefined、null、"string"、`template`、{}、[]、NaN、7、infinity、/abc/

    我没有想到任何限制。

    【讨论】: