Project1

标题: 【搬运】Javascript常见陷阱 [打印本页]

作者: MonsterJohnCN    时间: 2016-1-25 08:53
标题: 【搬运】Javascript常见陷阱
本帖最后由 MonsterJohnCN 于 2016-1-25 08:57 编辑



Javascript中的陷阱大集合



函数和操作符:
- 双等号
- parseInt不把10作为数字基数
- 字符串替换
- “+"操作符会执行相加操作和字符串连接操作
- typeof
- instanceof
- eval
- with

类型和构造函数:
- 使用“new”关键字构造内置类型
- 使用“new”关键字来构造任何东西
- 没有Integer类型

作用域:
- 没有块作用域
- 全局变量
- “this”和内部函数

杂项:
- 数据不存在:“null”和“undefined”
- 重定义undefined
- 可选的分号
- NaN
- arguments对象



{:8_459:}但愿这个文档能够拯救BUG海中的猴子们……
作者: 汪汪    时间: 2016-1-25 09:10
看起来很有用
作者: trentswd    时间: 2016-1-25 12:46
本帖最后由 trentswd 于 2016-1-25 12:54 编辑

那么问题来了,不用eval用什么呢?又不是都是用来解析json

查了一下,说可以用字符串构造function,有空试试
作者: MonsterJohnCN    时间: 2016-1-25 13:08
trentswd 发表于 2016-1-25 12:46
那么问题来了,不用eval用什么呢?又不是都是用来解析json

查了一下,说可以用字符串构造function,有空试 ...

这里提到的东西也会有片面的,我自己也用eval.apply这类方式来动态处理一些东西。
陷阱只是发出来供参考,实际使用总得有自己的判断
作者: taroxd    时间: 2016-1-25 14:28
trentswd 发表于 2016-1-25 12:46
那么问题来了,不用eval用什么呢?又不是都是用来解析json

查了一下,说可以用字符串构造function,有空试 ...


最重要的是要避免eval外部来的、不受信任的代码

自己写的技能公式和事件脚本什么的 eval 是没什么大问题的
作者: trentswd    时间: 2016-1-25 15:31
taroxd 发表于 2016-1-25 14:28
最重要的是要避免eval外部来的、不受信任的代码

自己写的技能公式和事件脚本什么的 eval 是没什么大问题 ...

它是说eval慢
想到我用eval来算窗口坐标,几乎每帧都要eval,有点方
作者: trentswd    时间: 2016-1-25 15:48
测试了一下,chrome下new Function比eval还慢
现在的js引擎对eval都有缓存,所以应该不用担心这个问题了……
作者: MonsterJohnCN    时间: 2016-1-25 15:53
trentswd 发表于 2016-1-25 15:48
测试了一下,chrome下new Function比eval还慢
现在的js引擎对eval都有缓存,所以应该不用担心这个问题了… ...

何必为了0.0001秒的时间纠结1000秒
作者: taroxd    时间: 2016-1-25 19:23
trentswd 发表于 2016-1-25 15:31
它是说eval慢
想到我用eval来算窗口坐标,几乎每帧都要eval,有点方

那你把计算的公式用 new Function 保存下来,每帧调用一遍就是了

new Function 虽然慢,但至少是一次性的,之后调用函数是不慢的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1