1、JSON.stringify()
前段时间与安卓同事做交互的时候,我把Object用JSON.stringify()序列化后调用安卓的方法传给apk,安卓同事去解析的时候发现某个参数没有了。
原因是JSON.stringify()对数据处理了
(1)会去除Object里面value为undefined的key
var object_1 = { a: 0 , b: { c: undefined}};
console.log(JSON.stringify(object_1))
//{"a":0,"b":{}}
(2)会将NaN变更成null,不管是Object还是Array
var object_2 = { a: 0 , b: { c: NaN}};
console.log(JSON.stringify(object_2))
//{"a":0,"b":{"c":null}}
(3)对比Object和Array使用JSON.stringify的表现
var array_1 = [undefined,0,NaN,undefined,null];
var array_2 = [{c:undefined},{ a: 0 , b: { c: NaN}}];
var object_3 = { a: undefined , b: { c: undefined}};
console.log(JSON.stringify(array_1))
console.log(JSON.stringify(array_2))
console.log(JSON.stringify(object_3))
//[null,0,null,null,null]
//[{},{"a":0,"b":{"c":null}}]
//{"b":{}}
由此可见JSON.stringify对数组和对象的影响是不一样的。
(4)会去除 对象 里面 value 为 function 的 key
var object_4 = { a: undefined , b: { c: function(){}}};
console.log(JSON.stringify(object_4))
// {"b":{}}
2、vue生命周期里哪个生命周期适合请求数据
数据驱动,只关心data能在哪个生命周期拿到就行了,v-model对应的就是data
created阶段data已经可以拿到了 ,所以异步请求在created、beforeMounted、mounted都可以,想要体验好一点点可以放到created中,但其实影响不大
3、关于if(false)能执行什么?var的作用域到底是什么?
当值为0、-0、null、undefined、NaN或者false时,if判断为false
负数不是false
在JavaScript中, 只有两种作用域: 全局和局部 var声明过程中,要么是在全局声明,要么是在函数内的局部声明
//全局
console.log(a)
if(false){
console.log(111111)
var a= 1;
console.log(a)
}
//局部,这里第一个a会报错, Uncaught ReferenceError: a is not defined
console.log(a)
function test(){
var a = 1
console.log(a)
}
test()
4、关于;与自执行函数
;(function(){
console.log(this);
})()
(function(){
console.log(this);
})()//(intermediate value)(...) is not a function
ECMAScript规范具有分号自动插入规则,如果自执行函数前后没有;,会当成变量
5、arguments
//arguments是js中函数内置的一个对象,执行函数方法的实参值都存储在arguments中,可以像数组一样通过下标获取它的值
function getArguments(){
console.log(arguments)
}
getArguments([1,2,3],{"name":"hc"},Symbol(1))