JS判断浏览器是否为IE(__proto__)

最近在看Zepto.js,由于它的最新版本已经不再支持所有的IE浏览器,所有文档里面给了一串代码来区分是否为IE然后分别插入Zepto.js或者Jquery.js,代码是这样的:

<script type="text/javascript">
document.write('<script src="js/' + ('__proto__' in {} ? 'zepto' : 'jquery') + '.js"></script>')
</script>
第一次见到__proto__这个属性,于是Google,Mozilla MDN里面有详细介绍:

一个对象的__proto__ 属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototype.__proto__的值就是null).该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型.

__proto__语法:

var proto = obj.__proto__;

注: 两个下划线,后跟五个字符”proto”,最后又是两个下划线.

__proto__描述:

当一个对象被创建时,它的 __proto__ 属性和内部属性[[Prototype]]指向了相同的对象 (也就是它的构造函数的prototype属性).改变__proto__ 属性的值同时也会改变内部属性[[Prototype]]的值,除非该对象是不可扩展的.

__proto__例子:

// 声明一个函数作为构造函数function Employee() {
  /* 初始化实例 */
}
 
// 创建一个Employee实例
var fred = new Employee();
 
// 测试相等性
fred.__proto__ === Employee.prototype; // true

回正题,以前看过一个6字节的判断是否为IE的例子,俄国人写的,现在去Google搜索,排在前面的还是那个例子,不过经验证在IE9、10下已经不起作用了。

不过我们可以用上面的那个例子,看代码:

var noIe = ('__proto__' in {});
alert(noIe);
//或者
if('__proto__' in {}){非ie}
else{ie}

经验证可行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值