当敲代码时?

141 阅读2分钟

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)对比ObjectArray使用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))

WX20220518-223632@2x.png