4
回答
【求助】如何查看Javascript中unicode转义前原字符
终于搞明白,存储TCO原来是这样算的>>>   

先看一个例子
var a="\u007a";          //   字符"z"的jsunicode编码
var b="z";
alert(a);
alert(b);

上面两个alert 出来的结果都是“z“,因为alert会自动进行转义,有没有办法知道变量原来的值到底是”z“还是"\u007a"呢?
因为有个复杂的字符串处理,中间会进行多次转义,调试的时候想知道中间每次转义的结果,但试过alert,console.log,document.write 等方法,都是会自动显示转义后的值,无法显示原值是多少。

另问:
var b= JSON.parse('{"a":"\\u007a"}');
alert(b.a);
alert的结果是"z",但b.a中的值是"z"还是“\u007a”呢?因为这两个值alert出来都是"z",但这两个不同的值关系到后面不同的转义处理。

<无标签>
举报
jimcnab
发帖于3年前 4回/499阅
共有4个答案 最后回答: 3年前

js中“z”和“\u007a”是没有任何区别的啊,只不过是代码中的写法不同。对人读来说,“z”和“\u007a”不一样,对机器来说都是一样的二进制编码。不可能区分a的值是“z”还是“\u007a”,因为对js来说“z”和“\u007a是一个值。硬要区分,只能在JSON.parse前去解析字符串了。隐隐感觉程序的设计有问题啊,怎么会需要做这种判断呢

--- 共有 1 条评论 ---
jimcnab看样子我以前对转义有些误解,我以前觉得转义的时候JS有额外的动作,其实JS也只是把内存当中的值作为字符显示出来,没有进行其他的处理。"z"和"\u007a"只是向内存中进行赋值的不同方法,内存中的值是一样的。 但JSON.parse好像确实会有额外的”转义“动作,因为他可以把"\\u007a"转成"z",不知道我的理解是否正确,请指教。 3年前 回复

var b= JSON.parse('{"a":"\\u007a"}');

这里会有2次转义,第一次是JSON.parse的,第二次是js本身,因此字面值要写成"\\\\u007a"才能获得字符串"\u007a"


引用来自“con”的评论

js中“z”和“\u007a”是没有任何区别的啊,只不过是代码中的写法不同。对人读来说,“z”和“\u007a”不一样,对机器来说都是一样的二进制编码。不可能区分a的值是“z”还是“\u007a”,因为对js来说“z”和“\u007a是一个值。硬要区分,只能在JSON.parse前去解析字符串了。隐隐感觉程序的设计有问题啊,怎么会需要做这种判断呢

回复 @jimcnab : a按照JSON标准语法应该写成“\u007a”。如果写成“\\u007a”,第一个\被当做转义符,转义的结果是“\u007a”,但是JSON.parse在执行时,好像是执行了Object.defineProperty()给生成的对象设置属性,直接把转义后的“\u007a”字符串传递给a属性的value,这时候相当于把“z”赋给了a。
大概记得ECMA-262里面是这么规定的,不是十分确定。希望有高人指教。
顶部