目录
-
写出以下代码的返回值
1.typeof NaN -------''number'
2. typeof null -------"object"
3. 1.1+0.1 --------1.2000000000000002 //小数点在计算机中是以二进制表示,而有些小数用二进制表示是无穷,所以才会出现上面这种精确度的问题
-
写出下面代码console的6次的输出值
/**考查对象原型的问题,注释是我自己添加的**/
const a = {name : 'cm',gender : 1};
const b = Object.creata(a); //以a为原型创建对象b
b.age = 12; //给b添加自有属性
b.city = "shanghai"; //给b添加自有属性
Object.defineProperty(b,'city',{ //将b对象的city属性的属性特性(是否可枚举)设为不可枚举
enumberable:false
})
console.log(Object.keys(b)); ---------["age"] //keys()方法返回对象的所有的可枚举的自有属性名称
console.log(Object.getOwnPropertyNames(b)); --------["age", "city"] //getOwnPropertyNames()返回对象的所有自有属性的名称,无论是否可枚举
let count = 0;
for(let i in b){ //遍历所有可枚举的属性
count++
};
console.log(count); ------3
console.log(b,b.__proto__); ------{age: 12, city: "shanghai"} {name: "cm", gender: 1}
小结:ES5 增加的keys()和getOwnPropertyNames():前者返回对象可枚举的自有属性,后者返回所有自有属性;
for/in 循环遍历对象的所有可枚举属性,包括自有属性和继承属性。
-
jsonp工作原理理解
jsonp实际上是通过动态插入js的方式实现的跨域,因为通过script标签引入js文件没有跨域一说
web客户端通过调用脚本的方式去调用跨域服务端动态生成的js文件(一般以json为后缀),同时传递一个callback参数给服务端,服务端以这个参数名为函数名,调用此函数以参数的形式将数据传到web端,这样就实现了前端跨域请求服务端数据。
-
ajax工作原理
ajax是一种不重载整个页面的情况下局部更新页面数据的一种异步请求方法。核心是XMLHttpRequest对象。
var xhr = new XMLHttpRequest();//创建对象,此时xhr.readyState=0
xhr.open('GET','json/json1.json?m=1',true);//与服务器建立连接,此时xhr.readyState=1
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');//设置请求头信息
xhr.send('msg=1');//发送请求 此时xhr.readyState=2
//4.接收,此时xhr.readyState=3/4(3是头接收完,4是体接收完)
xhr.onreadystatechange = function(){
if(xhr.readyState==4 && xhr.status == 200){
console.log('success')
console.log(xhr);
console.log(JSON.parse(xhr.responseText));
}
}
控制台打印xhr对象如下: