为什么console.log不能在JSC环境中工作,但它可以在Safari的调试控制台中运行

时间:2016-01-21 02:31:46

标签: javascript safari javascriptcore

当我使用系统库中提供的JSC(JavaScriptCore)引擎时,它的行为与使用Safari的调试控制台时不同

$ /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc
>>> console.log("hello");
Exception: TypeError: undefined is not an object (evaluating 'console.log')

console.log("hello");在Safari中完美运行时。

4 个答案:

答案 0 :(得分:6)

<强> TL; DR

var Console = function () {
    this.log = function(msg){ debug(msg) }; 
};
var console = new Console();
console.log("hello");

Safari创建一个控制台对象,该对象在调试控制台中可用,但在JSC环境中不可用。请参阅Safari的控制台文档here

添加我自己的包装JSC调试方法的控制台对象解决了我的问题:

$ /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc
>>> var Console = function () {
...     this.log = function(msg){ debug(msg) };
... };
undefined
>>> var console = new Console();
undefined
>>> console.log("hello");
-> hello
undefined

答案 1 :(得分:1)

JSC中不存在控制台对象 - 如果您喜欢JavaScriptCore console.log

,可以添加它

答案 2 :(得分:0)

我最终得到了一个适用于其他JS引擎以及JSC兼容性的衬垫:

Controller

答案 3 :(得分:0)

我从上面的答案中学到了。

尽管我没有看到目标,但我认为是在stdout上看到输出:

print('string')

准备就绪后,使用流编辑器将“ print”替换为“ console.log”。