js 扒一扒这些题目都考了哪些知识点
2016-05-27 10:26
447 查看
1.空数组是true还是false
题目:
*结果*:
分析:
知识点,当任意值与布尔值相比较,都会将两边的值转化为Number
而[]与false比较,false转换为0,[]为空数组,也转换为0
但是,因为[]虽然没有元素,但也是一个object,既然是object,在用于判断条件时就会被转换为true。
因此,得出上面的结果。
推荐阅读>>js 空数组是true还是false
引申
[]==[],这样的结果是true还是false呢?
[]数组,在js中的是对象,对象使用==比较都是比较的引用,简单说,就是,如果是同一个对象,就相等,如果不是同一个对象,就不相等,而每次使用[]都相当于新建了一个数组对象,所以[]==[]创建了两个数组对象,是不相等的。
推荐阅读>>
js中[]==[],为什么执行结果是false
js中基本上8中情况的逻辑false情况
2.循环中的闭包
题目:
*结果*
分析:
这个题目属于非常常见的闭包的坑。
我们先来分析这个题目。在函数中,alert的这个i变量,在函数中并没有进行声明,那么这个值从哪里来?就近原则,从for循环中取出。找到了i的来源,那么我们来确定i的大小。
这里我们需要了解setTimeout的机制,我们要知道,setTimeout并不会阻止当前的同步代码,它属于异步函数,它的执行时机依赖于同步代码的执行时间,在我们的这个例子中,alert被丢到异步执行的队列,当轮到alert执行的时候,for循环已经结束,而变量i没有被处理,仍然保持着循环结束时的值,所以,输出结果为5。
这一部分的内容,建议看一看setTimeout的机制、闭包、异步等知识点
推荐阅读>>
理解Javascript的闭包
JavaScript作用域问题?
关于JavaScript的问题
3.定义和调用的顺序
题目:
*结果*
hello 报错
分析:我们来看一下报错原因。
我们调用b函数的时候,b还没有定义。所以需要把代码第四行和第三行换下顺序,就ok了。
为什么呢?这里就涉及到了js程序的执行与顺序实现问题。
页面加载过程中,浏览器会对页面上或载入的每个js代码块或文件进行扫描,如果遇到定义式函数,则进行预处理,处理完成之后再开始由上至下执行;遇到赋值式函数,则只是将函数赋给一个变量,不进行预处理,待调用到的时候才进行处理。
推荐阅读>>js 程序执行与顺序实现详解
题目:
<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.循环中的闭包
题目:
<span style="font-size:14px;"><script> for(var i=0;i<5;i++){ setTimeout(function(){ alert(i); },500) } </script></span>
*结果*
<span style="font-size:14px;">弹出五次‘5’</span>
分析:
这个题目属于非常常见的闭包的坑。
我们先来分析这个题目。在函数中,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 程序执行与顺序实现详解
相关文章推荐
- 滚动栏改进,table切换,使广告随滚动条滚动
- 2016年5月27日上午(妙味课堂js基础-3笔记一(事件))
- js基础总结
- json解析二维对象
- js控制input输入的内容
- 读取本地json数据
- .Net深入实战系列—JSON序列化那点事儿
- 便签5-js延时器定时器
- js window.event 兼容浏览器问题
- JS集成fckeditor及判断内容是否为空的方法
- js getBoundingClientRect
- js获取项目根路径
- 原生js实现简单的展开收缩
- js实现div模拟模态对话框展现URL内容
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
- 基于JS实现密码框(password)中显示文字提示功能代码
- SSM框架下,Jsp页面提交请求及action获取值得问题
- js跨域问题浅析及解决方法优缺点对比
- 13个JavaScript图表(JS图表)图形绘制插件【转】
- 13个JavaScript图表(JS图表)图形绘制插件【转】