博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于js中的几个小问题。
阅读量:6974 次
发布时间:2019-06-27

本文共 875 字,大约阅读时间需要 2 分钟。

问题1:

 

使用连续赋值后面的变量会成为全局对象的一个属性,并且这个属性可以通过delete删除。

原因:赋值语句是从右往左执行的,我们将10赋值给了c,但是c此时还声明,接着把c的返回值赋值给了b,但是b也还没有声明,最后赋值给了a此时a有声明,所以a就是局部变量。

var a = b = c = 10;console.log(delete a); //falseconsole.log(delete b); //trueconsole.log(delete c); //true

这样好像看不出来什么太大的关系,但是在函数中就会出现很大的问题。

function fn(){    var a = b = c = 10;}fn();console.log(b); //10console.log(c); //10console.log(a); //a is not defined

此时b和c在全局范围都能够访问,因为b和c成了全局对象window的一个属性。

 

问题2:

如果把数组length事先保存到一个变量中,需要注意的是不管这个数组的长度在这之后是否有改动过,这个变量保存的数组的值依然是事先获取到的长度。

var arr = [1,2,3],    i = 0,    len = arr.length;arr.length = 2;console.log(len); //3console.log(arr.length);  //2

所以如果在之后有改动这个数组的长度的时候需要重新获取一下,以免出错。

 

问题3:

在js中不能按理说是不能把比较符当做函数的参数传递并且执行的,但是很多时候我们确实需要这样的一个功能,这两天发现一个方法可以实现这个功能。通过eval传递> || < .....

function fn(a){    if(eval(10+a+2)){        console.log(1);    }}fn(">") //1

实现的原理是因为,eval方法会把字符串当做代码来执行,至于使用的场景,由你自己想象。

转载地址:http://wkrsl.baihongyu.com/

你可能感兴趣的文章
RDLC报表格式化format表达式
查看>>
ArcMap属性的列菜单简介
查看>>
【2011.9.20】基于CXF Web Service:Apache CXF简单部署 .
查看>>
jquery Flexigrid的使用
查看>>
Inotify + rsync
查看>>
中风从水治案
查看>>
SQL Server 内存使用量下降问题
查看>>
嵌入式驱动开发之dsp fpga通信接口---spi串行外围接口、emif sram接口
查看>>
网络协议之socks---子网和公网的穿透
查看>>
Java控制语句——if语句
查看>>
BadUSB的防范研究
查看>>
网站flash黑屏问题
查看>>
JAVA TIMER定时器
查看>>
CCF-201512-3 绘图
查看>>
测试了一下LINQ写的Quick Sort性能
查看>>
网站是否有播放音乐功能
查看>>
架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
查看>>
41、java与mysql乱码的问题
查看>>
细说 Form (表单)
查看>>
在Web应用和IntelliJ IDEA中使用Spring框架
查看>>