上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] }