项目地址:https://github.com/eligrey/FileSaver.js

// The one and only way of getting global scope in all environments
// https://stackoverflow.com/q/3277182/1008999
var _global = typeof window === 'object' && window.window === window
? window : typeof self === 'object' && self.self === self
? self : typeof global === 'object' && global.global === global
? global
: this

多个三元运算符怎么看?

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

js多个三元运算符嵌套时运算优先级是从右往左的,另外加号优先级大于三元运算。

// 等同于 true ? 'true' : ( false ? 't' : 'f' )
true ? 'true' : false ? 't' : 'f'

// 等同于 "当前费用false" ? "$2.00" : "$10.00")
var isMember = false;
console.log("当前费用" + isMember ? "$2.00" : "$10.00"); //返回$2.00

// 示例来源:https://www.cnblogs.com/sxz2008/p/6432290.html

如何在所有环境里获取全局作用域?

这篇文章讲的很清楚,这也是为什么要写这么个方法拿全局作用域的原因

ES5 的顶层对象,本身也是一个问题,因为它在各种实现里面是不统一的。

  • 浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window
  • 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self
  • Node 里面,顶层对象是global,但其他环境都不支持。

同一段代码为了能够在各种环境,都能取到顶层对象,现在一般是使用this变量,但是有局限性。

  • 全局环境中,this会返回顶层对象。但是,Node 模块和 ES6 模块中,this返回的是当前模块。
  • 函数里面的this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this会指向顶层对象。但是,严格模式下,这时this会返回undefined
  • 不管是严格模式,还是普通模式,new Function('return this')(),总是会返回全局对象。但是,如果浏览器用了CSP(Content Security Policy,内容安全政策),那么evalnew Function这些方法都可能无法使用。

综上所述,很难找到一种方法,可以在所有情况下,都取到顶层对象。

BOM 是什么

JavaScript fromCharCode() 方法

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄