一、JSON.parse对象转换问题
obj = JSON.parse(data)时候报错:
SyntaxError: Unexpected token . in JSON at position 0
原因:
data已经是对象了。
JSON.parse():将JSON字符串转换成JSON对象
JSON.stringify():将JSON对象转换成JSON字符串
二、ajax发HTTP请求时报错:
[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.
中文翻译:
在主线程同步XMLHttpRequest是不赞成的,因为对最终用户的体验有不利影响。
原因:
以上警告信息在ajax方法执行同步操作(等有了返回值才执行下面的js,会短暂阻断程序继续执行)的时候出现,即:async:false。
如果业务层面允许,推荐异步执行AJAX,即将async属性设置为true。(async缺省下为true)
如果非要使用同步的Ajax(这种情况应该很少见),HTML5中增加了Worker对象,每个Worker运行在一个独立的线程中,Worker线程被阻塞一般是不会影响主线程和浏览器的。
三、console.log打印的问题
其实有时候打印的不是当前值,点开可以看到有个感叹号提示value below was evaluated just now
四、const和let的区别
let声明的变量可以改变,值和类型都可以改变,没有限制。
const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
五、forEach究竟能不能改变数组的值
因为forEach效率高选用forEach,结果发现无法修改数组的值,详见
https://blog.youkuaiyun.com/ZhengKehang/article/details/81281563
总结:
若原数组oldArr的元素是基本数据类型,则如下:
oldArr.forEach((el)=>{
el = 2
})
是没法将数组oldArr中的每个值改成2的。
若一定要将原数组oldArr中的数值改为2,则可通过明确数组下标的方式修改,如下即可&