一、运营商劫持
运营商是指那些提供宽带服务的 ISP,包括三大运营商中国电信、中国移动和中国联通,还有一些小运营商。运营商都是提供最基础的网络服务,网络运营商为了卖广告或者其他经济利益,有时候会直接劫持用户的访问,目前,运营商比较常见的劫持方式有两种,分别是 DNS 劫持,HTTP 劫持。
Object.defineProperty(obj, prop, descriptor)
如果对象中不存在指定的属性,Object.defineProperty() 就创建这个属性。当描述符中省略某些字段时,这些字段将使用它们的默认值——拥有布尔值的字段的默认值都是false;value,get 和 set 字段的默认值为 undefined。一个没有get/set/value/writable定义的属性被称为“通用的”,并被“键入”为一个数据描述符。
当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。出于安全原因,浏览器限制从脚本内发起的跨域 HTTP 请求。
JavaScript调用valueOf方法将对象转换为原始值。你很少需要自己调用valueOf方法;当遇到要预期的原始值的对象时,JavaScript会自动调用它。默认情况下,valueOf方法由Object后面的每个对象继承。 每个内置的核心对象都会覆盖此方法以返回适当的值。如果对象没有原始值,则valueOf将返回对象本身。
Promise 本质是个状态机。Promise 有三种状态:pending、fulfilled 和 rejected,而每个 Promise 只能有这三种的其中一种状态。状态是可转换的:pending -> fulfilled 或者 pending -> rejected,但是明确!!!状态转换是不可逆的,只能有这两种转换。
then 方法可以被同一个 Promise 调用多次,且必须返回一个 Promise。
为了保证 then 方法中的回调顺序执行,onFulfilled 或者 onRejected 必须异步调用。
当 Promise 执行成功时,调用 then 方法的第一个回调函数,失败时调用 then 方法的第二个回调函数。
1 | function Promise(fn) { |
采用 Flex 布局的元素,称为 Flex 容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称”项目”。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。项目默认沿主轴排列。
如果所有项目的 flex-grow 属性都为 1,则它们将等分剩余空间(如果有的话)。如果一个项目的 flex-grow 属性为 2,其他项目都为 1,则前者占据的剩余空间将比其他项多一倍。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。