Javascript 如何判断正在使用哪个JSON对象(Crockford';s或其他)?

Javascript 如何判断正在使用哪个JSON对象(Crockford';s或其他)?,javascript,json,version,Javascript,Json,Version,我用的是。当我想要字符串化时,我会使用JSON.stringify()…非常有效 但是,看过代码的人都知道,它遵从现有的JSON对象和属性。我怀疑我遇到的某个问题可能是由于这种尊重 我是否可以检查JSON对象的属性,以查看浏览器是否使用Crockford的对象或其他对象?能够做一些类似于alert(JSON.version())的事情会很好在加载Crockford的脚本之前,您可以像Crockford那样检查全局JSON对象: <script> var JSON,

我用的是。当我想要字符串化时,我会使用
JSON.stringify()
…非常有效

但是,看过代码的人都知道,它遵从现有的JSON对象和属性。我怀疑我遇到的某个问题可能是由于这种尊重


我是否可以检查JSON对象的属性,以查看浏览器是否使用Crockford的对象或其他对象?能够做一些类似于
alert(JSON.version())的事情会很好

在加载Crockford的脚本之前,您可以像Crockford那样检查全局JSON对象:

<script>
    var JSON,
        nativeJSON = true;

    if (!JSON) {
        var nativeJSON = false;
        document.write('<script src="js/json2.js"><\/script>');
    }

    if (!nativeJSON) {
        // All JSON objects are using Crockford's implementation
    } else {
        // All JSON objects from here on out are NOT using Crockford's implementation
    }
</script>

var JSON,
nativeJSON=true;
如果(!JSON){
var nativeJSON=false;
文件。写(“”);
}
如果(!nativeJSON){
//所有JSON对象都使用Crockford的实现
}否则{
//从这里开始,所有JSON对象都没有使用Crockford的实现
}

您可以决定这样使用:

<script>window.JSON || document.write('<script src="js/json2.js"><\/script>')</script>

假设所有JSON对象都是Crockford的实现,或者都不是,这样安全吗?如果是,那么您可以在引入Crockford脚本之前检查JSON全局对象,设置一个全局变量,如
nativeJSON=false可以稍后在代码中引用。另外,+1用于指出这个方便的脚本@davidkennedy85,我相信(但不知道)现在很多浏览器的javascript实现中都有本地JSON对象……我想。我不知道;我认为使用这个库的目的是为了那些本机不支持JSON的浏览器。Crockford的脚本只会创建一个新的JSON全局(如果还没有的话)。否则我会想象它什么都不做,否则我会想象它什么都不做。但是,大卫,这不是问题的重点吗?Crockfords实现可能会产生与其他实现不同的结果,因此人们可能想知道使用的是哪一个?我想不是。通过
src
属性加载的脚本是否每次都按照页面上的顺序执行?我不希望在加载json2.js之后进行检查。这是一个很好的观点@Sarfraz发布了一个我将借用的解决方案。@JonathanM-是的,通过“标准”脚本元素语法包含的脚本将按照它们包含的顺序执行。(有异步加载和执行脚本的方法,但这不会偶然发生。)您的条件
!JSON
指的是顶部声明的
JSON
变量,而不是本机浏览器JSON对象。这非常优雅,但它不会使以后在代码中检查正在使用的实现变得更容易。@davidkennedy85:Yep我不会担心哪个版本,因为目的是使用JSON,无论哪个版本可用:)我同意,但是它没有回答问题:)但是我如何使用这个方法来判断我使用的是现有的JSON对象还是Crockford对象?我想至少在一个警报中这样说,最多能根据Crockford还是其他做出程序性的决定。
var whichJSON = null;

if (! window.JSON) {
  document.write('<script src="js/json2.js"><\/script>');
  whichJSON = 'Crockford Version';
}
else {
  whichJSON = 'Browser Native Version';
}

alert(whichJSON);