你不知道的javascript(中卷)

2019-10-31  本文已影响0人  CRJ997
let a;
if (atob) {   // 如果atob没有声明的话,这样会出现reference error。
   atob(a);
} else {
  atob = function () { ... }
}
// 可以使用:
let a;
if (typeof atob !== 'undefined') {   // atob没有声明,也不会出现reference error。
   atob(a);
} else {
  atob = function () { ... }  // 注意不要用var声明需要polyfill的方法,可能会报错。
}

安全机制来讲,还可以通过检测某个属性是否是window对象的属性进行检测。像下面一样(不过下面的写法只适合于浏览器):

let a;
if(window.atob) {
  atob(a);
} else {
 atob = function () { ... }
}
var o = {};
var a = {
   b: 42,
   c: o,
   d: function () {}
};
// 在o中创建一个循环引用
o.e = a;
// 循环引用在这里会产生错误
// JSON.stringify( a );
// 自定义的JSON序列化
a.toJSON = function () {
  // 序列化仅包含b
 return { b: this.b}; // toJSON()方法是返回一个可以被JSON.stringify安全序列化的值
};
JSON.stringify( a ); // { "b": 42}
上一篇 下一篇

猜你喜欢

热点阅读