网上都说IE8原生支持JSON对象,Opera也说它支持,但为什么测试时为什么报JSON未定义?

love2java 2010-01-06 11:13:36
如题!

测试代码很简单:

<script type="text/javascript">
alert(JSON);
</script>


不知是我忽略了什么,望各位指点下,谢谢!
...全文
2654 26 打赏 收藏 举报
写回复
26 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
地狱羔羊 2010-07-09
  • 打赏
  • 举报
回复
因为你页面里加了<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
kslion 2010-01-07
  • 打赏
  • 举报
回复
据测,Firefox3。5、IE8、Chrome3.0.195.38三个浏览器已内置JSON对象,而Opera最新版本10.10还不支持。
love2java 2010-01-07
  • 打赏
  • 举报
回复
to # cuixiping # (愚公)

我当然不是想做个只兼容IE8的网页。我有提到过一直都是用的json2.js,它里面已经就是否有JSON对象进行检测:
if (!this.JSON) {
this.JSON = {};
}
但在RC版本的IE8中,如果一个对象的属性值是空串的话,通过stringify方法转换后会把""空串变为"null"。这个应该是RC版本的bug,在正式IE8版本中,我测试发现没有这个问题了。
孟子E章 2010-01-07
  • 打赏
  • 举报
回复
firefox,chrome已经支持了,safari也应该是支持的,使用原生 JSON也不是不可以了。最好是检测下是否支持
cuixiping 2010-01-07
  • 打赏
  • 举报
回复
对象检测是王道。
对象检测无法做到的,才考虑浏览器检测。
既然许多浏览器版本不支持JSON,那么就需要检测,也就是typeof
楼主你不会是想做个只兼容IE8的网页来吧?
孟子E章 2010-01-06
  • 打赏
  • 举报
回复
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<body>
<script type="text/javascript">
alert(typeof JSON)
</script>
</body>
</html>

或者

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<body>
<script type="text/javascript">
alert(typeof JSON)
</script>
</body>
</html>

才可以使用
qq373591361 2010-01-06
  • 打赏
  • 举报
回复
jf
love2java 2010-01-06
  • 打赏
  • 举报
回复
to wcwtitxu # (君当如狼)

将浏览器模式和文本模式都调整为IE8模式,能够alert(JSON)对象出来,不会报对象不存在。但我的问题就来了,如果我一定要在“开发者工具”里面作这样的调整才能有该对象出来,那有何实际意义?因为普通用户都是使用默认安装的IE8,他不会去改这些设置,也不应该让用户去修改设置。

而且我关掉IE8后,再打开IE8测试页面,仍然会报JSON不存在,也就是说在“开发者工具”里面作的修改只会对当前页面有效,它不会改变浏览器的全局设置。

如果这样,我们现在敢用这个原生的JSON对象么?
wcwtitxu 2010-01-06
  • 打赏
  • 举报
回复
按 F12

然后在 浏览器模式, 文本模式那里, 郁乱摆弄一下就知道了
love2java 2010-01-06
  • 打赏
  • 举报
回复
to wcwtitxu # (君当如狼)

本地的静态页面,如何确定是否使用了兼容模式?还有不知你的测试结果如何。

我发这个贴,是因为IE8说支持原生JSON,也就是可以直接使用JSON这个对象,在rc版本的IE8是能得到的,但我正式IE8中得不到这个对象,我不知究竟哪里有问题,麻烦XDJM也测试下。
王集鹄 2010-01-06
  • 打赏
  • 举报
回复
/*
Copyright (c) 2005 JSON.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

/*
The global object JSON contains two methods.

JSON.stringify(value) takes a JavaScript value and produces a JSON text.
The value must not be cyclical.

JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
return false if there is an error.
*/
var JSON = function () {
var m = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
s = {
'boolean': function (x) {
return String(x);
},
number: function (x) {
return isFinite(x) ? String(x) : 'null';
},
string: function (x) {
if (/["\\\x00-\x1f]/.test(x)) {
x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
var c = m[b];
if (c) {
return c;
}
c = b.charCodeAt();
return '\\u00' +
Math.floor(c / 16).toString(16) +
(c % 16).toString(16);
});
}
return '"' + x + '"';
},
object: function (x) {
if (x) {
var a = [], b, f, i, l, v;
if (x instanceof Array) {
a[0] = '[';
l = x.length;
for (i = 0; i < l; i += 1) {
v = x[i];
f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
if (b) {
a[a.length] = ',';
}
a[a.length] = v;
b = true;
}
}
}
a[a.length] = ']';
} else if (x instanceof Object) {
a[0] = '{';
for (i in x) {
v = x[i];
f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
if (b) {
a[a.length] = ',';
}
a.push(s.string(i), ':', v);
b = true;
}
}
}
a[a.length] = '}';
} else {
return;
}
return a.join('');
}
return 'null';
}
};
return {
copyright: '(c)2005 JSON.org',
license: 'http://www.crockford.com/JSON/license.html',
/*
Stringify a JavaScript value, producing a JSON text.
*/
stringify: function (v) {
var f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
return v;
}
}
return null;
},
/*
Parse a JSON text, producing a JavaScript value.
It returns false if there is a syntax error.
*/
parse: function (text) {
try {
return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
eval('(' + text + ')');
} catch (e) {
return false;
}
}
};
}();
sohighthesky 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wcwtitxu 的回复:]

alert(JSON.stringify(obj));
[/Quote]
btw:stringify这个方法ify是指的啥啊?
love2java 2010-01-06
  • 打赏
  • 举报
回复
下面是最简单的测试代码,各位有正式版本IE8和Opera10。10的可以试下。

<html>
<head>
<script language="JavaScript" type="text/javascript">
//language="JavaScript" 使用language是为了在Opera中alert有效
alert(navigator.userAgent)
alert(JSON);
</script>
</head>
<body>
</body>
</html>
wcwtitxu 2010-01-06
  • 打赏
  • 举报
回复
把浏览器调到 IE8 标准模式,
自己试一下就知道咯

var obj = {
'num':123
, 'str': 'abcde?>>"\'!@$@#%&\r\n中文ft'
, 'dat': new Date()
, 'reg': new RegExp('abc')
, ary:[1,2,3, 4,5,6]
, 'NaN': NaN
, 'null': null
, 'undefined':undefined
};
alert(JSON.stringify(obj));
love2java 2010-01-06
  • 打赏
  • 举报
回复
我在Opera10。10上测试也还不支持
sohighthesky 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 love2java 的回复:]
对于本地静态页面来说,它是不存在兼容模式的吧,我检查了兼容性视图设置,本地不在列表之内的。
[/Quote]
你用什么打开的,输出navigator.userAgent看看是不是ie8
love2java 2010-01-06
  • 打赏
  • 举报
回复
我其他同事使用RC版本的IE8,在这些版本上是能正常alert出来的;但正式版本的就不行。
王集鹄 2010-01-06
  • 打赏
  • 举报
回复

<script type="text/javascript">
alert(接分);
</script>
sohighthesky 2010-01-06
  • 打赏
  • 举报
回复
opera10.01目前好像不支持吧



[Quote=引用 2 楼 soundtbugle 的回复:]
哪它自动生成的json都些什么内容呀
[/Quote]https://developer.mozilla.org/En/Using_native_JSON
love2java 2010-01-06
  • 打赏
  • 举报
回复
对于本地静态页面来说,它是不存在兼容模式的吧,我检查了兼容性视图设置,本地不在列表之内的。
加载更多回复(5)
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2010-01-06 11:13
社区公告
暂无公告