我是JavaScript的新手。在nashorn 1.8.0_11中,我看到了下面的行为。注意print(x)
工作正常,但评估x
会导致崩溃。我可以认为这是一个错误吗?如果是这样,这是一个已知的错误吗?
jjs> var x = Object.create(null);
jjs> print(x);
<shell>:1 TypeError: Cannot get default string value
jjs> x;
Exception in thread "main" ECMAScript Exception: TypeError: Cannot get default string value
at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:56)
at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:212)
at jdk.nashorn.internal.runtime.ECMAErrors.typeError(ECMAErrors.java:184)
at jdk.nashorn.internal.objects.Global.getDefaultValue(Global.java:592)
at jdk.nashorn.internal.runtime.ScriptObject.getDefaultValue(ScriptObject.java:1257)
at jdk.nashorn.internal.runtime.JSType.toPrimitive(JSType.java:256)
at jdk.nashorn.internal.runtime.JSType.toPrimitive(JSType.java:252)
at jdk.nashorn.internal.runtime.JSType.toStringImpl(JSType.java:993)
at jdk.nashorn.internal.runtime.JSType.toString(JSType.java:326)
at jdk.nashorn.tools.Shell.readEvalPrint(Shell.java:449)
at jdk.nashorn.tools.Shell.run(Shell.java:155)
at jdk.nashorn.tools.Shell.main(Shell.java:130)
at jdk.nashorn.tools.Shell.main(Shell.java:109)
答案 0 :(得分:0)
这是预期的。使用“jjs”shell工具以交互方式计算表达式时,它会将计算后的表达式结果转换为String以打印相同的表达式。此外,“print”函数调用对象上的toString以将其字符串表示形式打印到控制台。使用Object.create(null),您将创建一个原型为null的对象(因此不会继承Object.prototype.toString)。此外,您的对象没有具有函数类型值的“toString”属性,因此也没有TypeError。请注意,您也可以使用v8 shell。
V8版本3.25.15 [样本外壳]
var x = Object.create(null) X; 打印(X)