1.空数组是true还是false

题目:

<script>
var tmp = 'a';
if([]==false)
tmp+='b';
if(![]) tmp +='c';
alert(tmp);
</script>
*结果*:

ab

分析:

知识点,当任意值与布尔值相比较,都会将两边的值转化为Number

而[]与false比较,false转换为0,[]为空数组,也转换为0

但是,因为[]虽然没有元素,但也是一个object,既然是object,在用于判断条件时就会被转换为true。

因此,得出上面的结果。

推荐阅读>>js 空数组是true还是false

引申

[]==[],这样的结果是true还是false呢?

[]数组,在js中的是对象,对象使用==比较都是比较的引用,简单说,就是,如果是同一个对象,就相等,如果不是同一个对象,就不相等,而每次使用[]都相当于新建了一个数组对象,所以[]==[]创建了两个数组对象,是不相等的。

推荐阅读>>

js中[]==[],为什么执行结果是false

js中基本上8中情况的逻辑false情况

2.循环中的闭包

题目:

<script>
for(var i=0;i<5;i++){
setTimeout(function(){
alert(i);
},500)
}
</script>
*结果*

弹出五次‘5’

分析:

这个题目属于非常常见的闭包的坑。

我们先来分析这个题目。在函数中,alert的这个i变量,在函数中并没有进行声明,那么这个值从哪里来?就近原则,从for循环中取出。找到了i的来源,那么我们来确定i的大小。

这里我们需要了解setTimeout的机制,我们要知道,setTimeout并不会阻止当前的同步代码,它属于异步函数,它的执行时机依赖于同步代码的执行时间,在我们的这个例子中,alert被丢到异步执行的队列,当轮到alert执行的时候,for循环已经结束,而变量i没有被处理,仍然保持着循环结束时的值,所以,输出结果为5。

这一部分的内容,建议看一看setTimeout的机制、闭包、异步等知识点

推荐阅读>>

理解Javascript的闭包

JavaScript作用域问题?

关于JavaScript的问题

3.定义和调用的顺序

题目:

<script>
a();
function a(){alert('hello');}
b();
var b=function(){alert('world');}
</script>
*结果*

hello 报错

分析:我们来看一下报错原因。

我们调用b函数的时候,b还没有定义。所以需要把代码第四行和第三行换下顺序,就ok了。

为什么呢?这里就涉及到了js程序的执行与顺序实现问题。

页面加载过程中,浏览器会对页面上或载入的每个js代码块或文件进行扫描,如果遇到定义式函数,则进行预处理,处理完成之后再开始由上至下执行;遇到赋值式函数,则只是将函数赋给一个变量,不进行预处理,待调用到的时候才进行处理。

推荐阅读>>js 程序执行与顺序实现详解

最新文章

  1. TIJ——Chapter Seven:Reusing Classes
  2. JSBinding / Plugins &amp; Build Mozjswrap Library
  3. Python 线程、进程和协程
  4. python-抓取图片
  5. c语言编程之栈(链表实现)
  6. 微软Hololens设备 浅分析
  7. 系统调用服务号 linux 2.6.32
  8. Swipecards
  9. C#类型基础——学习笔记一
  10. Android开发okhttp,retrofit,android-async-http,volley?
  11. 1、初识socket
  12. less使用ch1--认识语法
  13. BZOJ_4320_ShangHai2006 Homework_分块
  14. 《SSO CAS单点系列》之 APP原生应用如何访问CAS认证中心
  15. 第七届蓝桥杯大赛个人赛决赛(软件类C语言B组)第一题:一步之遥
  16. windows下面使用nssm设置新的服务实现开机自启等
  17. c#Stream学习笔记
  18. Objective-C 对象和消息模型
  19. 体验h5离线缓存
  20. django ---- models继承

热门文章

  1. 实现一个带有指纹加密功能的笔记本(Android)第一部分
  2. C++11中initializer lists的使用
  3. Hbase表格设计
  4. 创建react
  5. 「日常训练」 Soldier and Traveling (CFR304D2E)
  6. hdu1505City Game(动态规划)
  7. 修改npm全局安装模式的路径
  8. JMeter接口响应数据出现乱码的三种解决方法
  9. kinit
  10. git 创建分支并提交到服务器对应的新分支