javaScript怪癖分析
最近了解到javascript中有些编程怪癖现象,很有意思,有必要总结一下:
1.未知变量名创建全局变量
在我们平常的编写javascript程序的时候,有的人写法不是很正规,在定义变量的时候 直接定义“变量名=值”前面没有加上"var" 则javascript自动将其定义为全局变量看待
但在 ECMAScript5 的严谨模式得到警告:
例如:function f() { 'use strict'; foo = 123 } f() ReferenceError: foo is not defined
2.两个空值 underfined 和 null
对于“空值”或“空引用”,大多数编程语言只有一个值。比如,在 Java 中用的是 null
,但在javascript给出了2个值(undefined 和 null)
underfined:
<script type="text/javascript">var s;console.log(s);</script>
结果:
同理:当在对传值参数操作的时候,如果没有值,会自动分配一个undefined。
<script type="text/javascript">function id(x) { return x }console.log(x);</script>
在火狐运行结果:
在IE运行结果: 汗!火狐好歹给一个undefined,IE直接就判断未定义,这机制太懒了。。。
null:是被开发者用来明确指出某个值是缺失的
在开发过程中,我们传参可能需要这个参数没有值,对此场景就设置一下参数等于null即可。
校检:一个变量是否有值?
<script type="text/javascript">//例子var x ;if (x) {console.log('有值');} else {console.log('没值');} </script>
如果你想知道变量 x
是否有值,正常情况下,你需要同时检验 undefined
与 null
。 幸运的是两个值都是false。 因此,只用一个判断,就可以同时检验这两项是否为真,有一点要注意的是:这个检查也会把 false
, -0
, +0
, NaN
与 '' 当成“空值”。 如果这不是你想要的,那么就不能使用上面的校检方法了。还有2种方法选择
有人喜欢用"!="来进行参数校验
<script type="text/javascript">//例子var x ;if (x != null) {console.log('有值');} else {console.log('没值');} </script>
不过,这要求你要明白 !=
认为 null
只等于它自己或是 undefined
。
<script type="text/javascript">//例子var x ;if (x !== null) {console.log('有值');} else {console.log('没值');} </script>
用"!=="这样的方式判断有的压缩工具会将其直接转换成"!="。
3.标准的等号 (==)
由于一般的等于符号 ==
、!=
经常会出现问题,以至于我们不得不使用严格等于(===
、!==
),这个“正常”的等号(==
)有很多怪癖。当与真值或者假值比较时,它会忽略类型
<script type="text/javascript">console.log(0== false);//trueconsole.log(1== true);//trueconsole.log(2== true);//false console.log('' == false);//trueconsole.log('1'== true);//trueconsole.log('2'== true);//false </script>
看到一些不正常的结果了吧,判断出false,顿时有些晕,除了这些,我们设置可以把那些明显不能比较的值进行比较
<script type="text/javascript">console.log('' == false);//trueconsole.log('\n 123 \t'== 123);//true </script>
我去 !!!console.log('\n 123 \t'== 123);//true 明明2边不对称却是true,无语。。。因为在 javascript 中把字符串转换数字类型时,会过滤掉首尾空白字符。
如果我用“===”则结果就应该是我认为正常的了。
<script type="text/javascript">console.log('\n 123 \t'=== 123);//false </script>
4.参数处理
在javascript传参处理中,我们经常会遇到这些方式
(1)不给参数值,则自动分配一个undefined
<script type="text/javascript">function f(x, y) {console.log('x: '+ x);console.log('y: '+ y);}f(); </script>
打印结果:
<script type="text/javascript">var x = 1;function f(x, y) {console.log('x: '+ x);console.log('y: '+ y);}f(x); </script>
打印结果:
注: 如果 在f(1,2,3,4)则多余值在函数体内则不赋值操作,因找不到对应的变量,所以不进行赋值。
5.input设置置灰
通常我们在对input设置置灰会直接在input标签中加上disabled='disabled',但是有个问题,场景分析:
看起来一切正常的,如果我用javascript去设置这个输入框变成可以输入,代码如下:
$('input').attr('disabled',false);
这样就成功的设置了输入框可以操作,但是我再次刷新页面的时候,此输入框已经不能进入默认“不可以输入”的状态了,在火狐浏览器下看DOM节点发现disabled属性已经没了,被js操作之后就消失了。。。
汗 这个是HTML的怪癖还是javascript的怪癖,我一时摸不到头脑了,既然js把属性弄没了,我就用js来做默认设置,当每次刷新页面的时候给输入框设置“disabled”
$("input[type='text']").attr('disabled','disabled');
这样就避免了被js操作之后 输入框不能返回不可输入的状态了。
转载于:https://www.cnblogs.com/kuailingmin/p/4145840.html
javaScript怪癖分析相关推荐
- 一些有用的javascript实例分析(二)
一些有用的javascript实例分析(二) 原文:一些有用的javascript实例分析(二) 1 5 求出数组中所有数字的和 2 window.onload = function () 3 { 4 ...
- JavaScript 空间分析库——JSTS和Turf
前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个JavaScript 空间分析库. JSTS JSTS是一个符合OGC规范的简单要素空间位置判定函数JavaScript ...
- 腾讯手Q webview技术owner厉心刚:JavaScript引擎分析
声明:本文来自腾讯增值产品部官方公众号小时光茶社,为CSDN原创投稿,未经许可,禁止任何形式的转载. 作者:厉心刚,SNG 增值产品部终端开发,高级工程师:参与多个项目开发(QQ情侣,手Q,阅读,电竞 ...
- 某网站高度加密混淆的javascript的分析
前言 对某网站加密混淆后的javascript代码也算分析了一段时间了,虽然还没搞出来,但多少有些新得,这里记录一下. 工具和资料 https://jq.qq.com/?_wv=1027&k= ...
- Chrome开发者工具之JavaScript内存分析
为什么80%的码农都做不了架构师?>>> 内存泄漏是指计算机可用内存的逐渐减少.当程序持续无法释放其使用的临时内存时就会发生.JavaScript的web应用也会经常遇到在原生 ...
- Python采集群人员数据,记录JavaScript逆向分析过程
目录 前言 准备工作 分析(x0) 分析(x1) 分析(x2) 分析(x3) 代码 结语 前言 本人所有文章内容.源码,除官方企业外,禁止个人转载,谢谢配合. ....太多培训机构拿我的文章源码去讲 ...
- 某网站高度加密混淆的javascript的分析 1
对某网站加密混淆后的javascript代码也算分析了一段时间了,虽然还没搞出来,但多少有些心得,这里记录一下. 工具和资料 前一篇文章 - 记录了之前尝试的一些初步研究成果 awesome-java ...
- JavaScript 怪癖
如果对你来说JavaScript还是一门全新的语言,或者你是在最近的开发中才刚刚对它有所了解,那么你可能会有些许挫败 感.任何编程语言都有它自己的怪癖(quirks)--然而,当你从那些强类型的服务器 ...
- TypeScript输入参数的默认值一例,以及对应生成的JavaScript代码分析
const fun = ({ aa = 1, bb = 0 } = {}) => {console.log('aa: ' + aa);console.log('bb: ' + bb);retur ...
最新文章
- PythonTip(2)
- 最后一期:如何更新LSTM模型?(附代码)| 博士带你学LSTM
- 看图说话:用户标签可以这样轻松创建
- Hibernate 配置详解(5)
- ffmpeg 同宽度 画中画_FFmpeg中overlay滤镜用法-水印及画中画
- java游戏怎么设置背景色_java-将背景色设置为JButton
- 虚拟主机需要备案吗?
- Excel 散点图和折线图的区别
- Python模拟随机游走
- 两个高斯分布乘积的理论推导
- 珍藏的PS技巧(可以尝试一下哦)(转载)
- TM4C123G学习笔记(1)——配置Keil开发环境(TM4C123G+Keil)
- 根据flavors设置buildType中debug的签名文件
- 《Python编程从入门到实践,P110---习题》
- 【渝粤教育】电大中专跨境电子商务理论与实务 (26)作业 题库
- 判断是ios终端还是安卓终端
- cad字体安装_免费的CAD字体去哪找?下载之后如何安装?1分钟教你搞定
- matlab 谐波注入,一种基于谐波注入的新能源汽车永磁同步电机噪声控制方法与流程...
- 关于并口控制实验中用到的接口板及驱动板
- IOS之RSA加密解密与后台之间的双向加密详解