【js】问题集锦

本文汇总了JavaScript开发中常见的问题,包括JSON.parse错误、同步AJAX请求、console.log的即时求值、const与let的区别、forEach修改数组、定时器使用、浮点数运算误差、类型判断、replaceAll方法的兼容性、forEach跳出循环、双层循环、ES6对象简写、localStorage使用、空格处理、iframe通信以及定时器与异步请求的管理等,提供了详细的解答和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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,则可通过明确数组下标的方式修改,如下即可&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值