评估null对象 - > nashorn控制台崩溃("无法获取默认字符串值")

时间:2014-08-05 19:54:46

标签: console nashorn

我是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)

1 个答案:

答案 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)