Node.js权威指南
上QQ阅读APP看书,第一时间看更新

2.2 在REPL运行环境中操作变量

在REPL运行环境中,可以使用var关键字来定义一个变量并为其赋值,但是在输入了对其赋值进行的表达式后,该表达式的执行结果将被显示为undefined。

例如,在如下所示的两条表达式中,第一条表达式中不使用var关键字,执行结果为变量值,第二条表达式中使用var关键字,执行结果为undefined。

> foo='bar';
'bar'
>var foo='bar';
undefined

之所以出现这样两种不同的结果,是因为REPL环境内部使用eval函数来评估该表达式的执行结果。而在JavaScript代码中,如果将上述两条表达式作为eval函数的参数,则eval函数将返回不同的结果。

console.log("foo='bar'");                  // 控制台窗口中将输出“bar”
console.log("varfoo='bar'");            // 控制台窗口中将输出undefined

在REPL运行环境中为变量赋值后,我们可以通过输入变量名的方法来查看变量内容。

将简单类型的值赋值给变量后,输入变量名后按下回车键,REPL运行环境中将直接显示该变量值,输入表达式及其执行结果如下所示:

// 为变量赋值
> foo='bar';
'bar'
// 输入变量名后显示变量值
>foo
'bar'

将对象赋值给变量后,输入变量名后按下回车键,REPL运行环境中将直接显示该变量所引用对象的各属性名及属性值,输入表达式及其执行结果如下所示:

// 将对象赋值给变量
>user=new Object();
{}
>user.Name='Lulingniu';
'Lulingniu'
>user.age=40;
40
// 输入变量名后显示变量所引用对象的各属性名及属性值
>user
{Name:'Lulingniu',age:40}

如果变量所引用对象的某个属性值为一个函数,输入变量名并输入回车键后,REPL运行环境中将把该属性值显示为“[function]”(这是因为函数中通常可能具有很多内容,如果REPL运行环境中使用函数内容来显示该属性值的话,一个变量内容往往可能会变得很长很长),输入表达式及其执行结果如下所示:

// 将对象赋值给变量
>user=new Object();
{}
>user.Name='Lulingniu';
'Lulingniu'
>user.setName=function(name){user.name=name};
[function]
// 输入变量名后显示变量所引用对象的各属性名及属性值,使用”
[function]”来显示函数
>user
{Name:'Lulingniu',
setName:[function]
}