javascript变量可以包含任何内容吗?

javascript变量可以包含任何内容吗?,javascript,types,Javascript,Types,我知道它们可以包含基本数据类型和对象。由于我一直在react中编程,我知道它们可以包含对象、组件甚至json。javascript变量有任何限制吗?var/const/let任何值都可以存储在JavaScript变量中。价值包括: 所有原语 对象引用 几乎所有东西都是JavaScript中的对象。值得注意的是,函数是对象(包括React无状态函数组件[SFC]和React组件,它们是构造函数函数),因此变量可以包含对函数的引用: function foo(msg) { console

我知道它们可以包含基本数据类型和对象。由于我一直在react中编程,我知道它们可以包含对象、组件甚至json。javascript变量有任何限制吗?var/const/let

任何值都可以存储在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");
函数foo(msg){
console.log(“foo:+msg”);
}
功能条(msg){
控制台日志(“条:“+msg”);
}
常数f=Math.random()<0.5?福:酒吧;
f(“Hi”);
你有50/50的机会看到带有该代码的“foo:Hi”或“bar:Hi”

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

  • 接线员。例如,这是无效的:

    // NOT VALID
    const op = Math.random() < 0.5 ? + : -;
    console.log(10 op 5);
    
    //无效
    常量op=Math.random()<0.5?+:-;
    控制台日志(10 op 5);
    
    …虽然使用函数很容易获得相同的效果:

    const op = Math.random() < 0.5
               ? (a, b) => a + b
               : (a, b) => a - b;
    console.log(op(10, 5));
    
    const op=Math.random()<0.5
    ? (a,b)=>a+b
    :(a,b)=>a-b;
    控制台日志(op(10,5));
    
  • 执行上下文或词法环境,但这仅仅是因为代码中从未公开对它们的引用

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

…甚至json


JSON是用于数据交换的文本表示法。如果处理的是JavaScript源代码,而不是字符串,那么就不是JSON。

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

例如,
var
可以包含:true、未定义、null、“string”、“template`、{}、[]、NaN、7、无穷大、/abc/


我想不出有什么限制。

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