Javascript 检索ClojureScript中数字的二进制表示形式

Javascript 检索ClojureScript中数字的二进制表示形式,javascript,clojurescript,Javascript,Clojurescript,我想得到一个数字的二进制形式,例如6->“0110” 我尝试了(js/toString…),但无论我使用什么语法,repl总是返回“[object Window]”。这是什么意思 我也很困惑,因为toString是goog.math.Integer的一部分,但当我尝试使用同一个库的一部分js/isOdd时,它说它没有定义。我试图通过(ns user(:require[goog.math.Integer:as int])手动请求它,但是没有任何区别 对于(.toString…和(js/toStri

我想得到一个数字的二进制形式,例如6->“0110”

我尝试了
(js/toString…
),但无论我使用什么语法,repl总是返回
“[object Window]”
。这是什么意思

我也很困惑,因为toString是goog.math.Integer的一部分,但当我尝试使用同一个库的一部分js/isOdd时,它说它没有定义。我试图通过
(ns user(:require[goog.math.Integer:as int])手动请求它,但是没有任何区别

对于
(.toString…
(js/toString…
之间的区别,我也感到困惑


非常感谢您对cljs中js函数的具体问题和/或细微差别的任何帮助。谢谢

这是一个解析器错误,有三种方法可以做到这一点,创建一个带有数字的
var
,然后调用
.toString
,用一个额外的点写入数字或将数字写入括号中

如果在JavaScript控制台上尝试
6.toString(2)
,将出现以下错误:

SyntaxError:意外标记非法

但是这个
6..toString(2)
有效。这是因为JavaScript解析器希望数字后跟一个点是浮点文本。当您写入
6.
时,解析器希望下一个字符不是
t
,当您写入
6..
时,第一个点被解析为数字的一部分(创建数字6.0),第二个点被解析为对所创建数字的方法调用

在ClojureScript中,编译器知道JavaScript的这一“功能”,因此您可以将6文本传递给
toString

cljs.user> (.toString 6 2)
"110"
cljs.user> (.toString 6. 2)
"110"
ClojureScript编译器在这两种情况下都会生成正确的代码。在第一种情况下,它生成
(6).toString(2)
,在第二种情况下,它生成
6.0.toString(2)

(js/toString 6)
正在调用在
窗口
全局对象上定义的
toString
。不管你通过了什么,结果总是一样的。您可以通过JavaScript控制台中的
window.toString()
检查该调用

(.toString目标args)
正在调用在传递args作为方法参数的目标对象中定义的
toString

您应该使用
(.toString 6 2)
。使用
(js/toString…
相当于
toString(…)
,您可以在典型的javascript浏览器控制台中尝试评估自己。您将看到还将获得一个“对象窗口”

(js/thing)
用于引用javascript运行时符号。特别是,如果加载的代码与已编译的clojurescript分开(例如,通过不同的脚本加载),则可以使用
js/…
语法引用加载的符号<在本例中,code>js/thing
将在javascript的顶级范围中引用
thing

例如,假设您正在使用ROT.js库,该库通过ROT对象公开其API。您可以使用
js/ROT
在clojurescript中访问它的函数(假设库已经加载)。创建在ROT.Display中找到的显示对象的实例将使用
(js/ROT.Display.params)
完成

另一方面,加载的闭包兼容代码的访问取决于名称空间中对它们的要求。通常,如果您已使用
(ns测试(:require[goog.math:as math])
加载
goog.math
库,则可以使用
(math/something)
访问
goog.math
下的所有内容

(.function-object-params)
语法用于调用javascript对象的方法,并将对应于
object.function(params)
。请记住,javascript对象与通过纯clojurescript代码创建的值和对象不同。请使用
(-property-object)
,如果您只想获取该对象属性的值,您还可以查找
doto
,以及线程宏
->
->
,以了解在clojurescript中处理javascript对象的更多方法。clojure中为java提供的大多数互操作功能都适用于javascript/clojure剧本。我也推荐阅读


对于
isOdd
,这是
goog.math.Integer
实例的实例方法。首先创建该实例(例如
(def e(new math/Integer…)
)然后您可以在该实例上调用
.isOdd
。查看文档,查看哪些静态属性和方法可以直接从整数范围访问。

(6)。toString(2)
对我有效…在clojurescript repl中?这种语法在我看来甚至不像lisp,我的repl说这是非法的有趣,
(.toString 6.2)
有效,但
(.toString 6.2)
给出了一个非法的语法错误。这是什么原因造成的?@Phylth奇怪的是,我在ClojureScript REPL中测试了这两种形式。您使用的是哪种版本的ClojureScript?我在下面的版本0.0-2371和0.0-2755中进行了测试。如何启动cljs REPL?我一直在使用0.0-2156并从SublimateText启动浏览器REPL。我甚至还没有able以任何其他版本开始。它不断抛出clojure.lang.ExceptionInfo。很可能是旧版本导致的。是的,此错误在0.0-2261中得到了修复。请参阅问题和提交。也许您可以创建另一个问题来描述此问题。嗯,
(.toString 6 2)
导致
语法错误:意外标记非法
对我来说。不过,您对不同语法的解释非常有用,谢谢。