jsop
原理:直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是http://example.com/data.php,那么a.html中的代码
callback参数,按惯例是用这个参数名,但是你用其他的也一样。当然如果获取数据的jsonp地址页面不是你自己能控制的,就得按照提供数据的那一方的规定格式来操作了。
服务端代码:
所以通过http://example.com/data.php?callback=dosomething得到的js文件,就是我们之前定义的dosomething函数,并且它的参数就是我们需要的json数据,这样我们就跨域获得了我们需要的数据。
undefined和null与任何有意义的值比较返回的都是false
this 的指向
var obj ={a:1,b:function () {alert(this.a)}};
var fun =obj.b;
fun(); // 弹出undefined
解析:
但只需要记住 this的值要等到代码真正执行时才能确定
同时this的值具体有以下几种情况:
1. new 调用时指的是被构造的对象
2. call、apply调用,指向我们指定的对象
3. 对象调用,如执行obj.b(),this指向obj
默认的,指向全局变量window(相当于执行window.fun())
这样看来,当你执行fun()的时候,以上1,2点均不满足。
第3点,因为this是运行时确定的,而我们执行fun(),等同于windown.fun()(与obj没有任何关系),自然的this指向window,而window没有定义变量a,结果是undefined。
几种赋值运算符:
按位与赋值(Bitwise AND assignment) x &= y x = x & y
按位异或赋值(Bitwise XOR assignment) x ^= y x = x ^ y
按位或赋值(Bitwise OR assignment) x |= y x = x | y
ES6 模块正确的写法:
// 写法一
export var m = 1;
// 写法二
var m = 1;
export {m};
// 写法三
var n = 1;
export {n as m};