IE严格模式

Posted by Leo on 2022-03-10
Estimated Reading Time 2 Minutes
Words 577 In Total
Viewed Times

严格模式下一个属性不允许多个定义

需求引发问题

有一个汉字首字母检索的需求,设想的解决思路是:

>

  1. 将拿到的数据取出首个汉字,组成数组出入找到的 js 汉字转拼音库: https://my.oschina.net/tommyfok/blog/202412
  2. 根据生成的首字母数组生成字母索引

问题出现

由于所有的代码都是在严格环境下执行,在测试时浏览器报了一个错误,严格格模式下未定义变量 ,原来是在严格模式下同一个对象内不允许重复定义属性,经过定位发现是汉字转拼音那个库里的字典出了问题,重复定义了某一个属性

资料截图

尝试解决

  1. 通过for-in循环遍历字典对象内所有属性,打印出重复属性并找到删除,结果失败,重复定义的属性被取成了后定义的一个值
  2. 通过Object.keys(obj)取出字典对象所有属性,结果失败,重复定义的属性被取成了后定义的一个值

解决方案

既然js对象遍历的方法都直接覆盖了前一个定义的属性,那就遍历字典对象,将key和value全打印出来,然后复制出来,当做一个新字典,这里要注意,汉字的unicode码在打印时需要转换,否则打印出来是汉字
1
2
3
4
5
6
7
8
9
10
11
12
var GB2312UnicodeConverter = {
ToUnicode: function (str) {
return escape(str).toLocaleLowerCase().replace(/%u/gi, "\\u");
},
ToGB2312: function (str) {
return unescape(str.replace(/\\u/gi, "%u"));
},
};

for (var p in obc) {
console.log('"%s":"%s",', p, GB2312UnicodeConverter.ToUnicode(obj[p]));
}

遗留问题

写了一个demo测试,但在IE/Chrome/Node环境下运行都不会报错
1
2
3
4
5
6
7
//严格模式下一个属性不允许多个定义测试demo
"use strict";
var people = {
name: "devil",
age: 24,
name: "leo",
};

尴尬的发生

字典属性去重后发现多音字根本识别不了,原来字典中有一个对象定义了多音字的组合,枚举的多个词语都对应一个汉字的 unicode 码,但由于前面已经去重重复定义属性,所以多音字识别就会出错。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !