JavaScript 学习之路- JS 小测验
在学习 JS 的过程中,很多知识往往看一遍就过去了,而后自以为掌握了,其实再次碰到不肯定能答得出来,看到少量有趣的东西还是要动手实践一下,而且时不时复习一下,非常有利于加深记忆。今天是五一,假日期间,好好休息玩耍,也别学什么新东西了,你可以看看以下这些问题以及相关知识点来看看自己掌握了多少,温故知新。
问题不多,耐心看完。最下方有答案,先别急着翻,自己先想想。
问题
- JS 格式化,用逗号分隔千分位数字
- 运行
[1, 2, 2].fill(3, 1, 3)会输出什么 ~~3.5的结果是什么- 如何判断一个数组的长度是奇数还是偶数
- JSON.parse 和 JSON.stringify 的作用
typeof null为什么等于"object",它的判断原理是什么- 如何判断一个元素能否为数组
<<和>>运算符- function add(){} 和 var add = function(){} 解析时的区别
- 执行以下代码,输出是什么?为什么?
var arr=[1,2,3,4,5];for(var i=0;i<arr.length;i++) { arr[i]=function(){ alert(i) }}arr[3]();参考答案
如有错误,请帮忙指正。
- JS 格式化,用逗号分隔千分位数字
两种方法,一种是使用 tolocaleString()
var a = 1999;a.toLocaleString(); // "1,999"另外一种是正则表达式
var re = /(?!^)(?=(\d{3})+$)/g;var a = "12345678";a.replace(re, ','); // "12,345,678"- 运行
[1, 2, 2].fill(3, 1, 3)会输出什么? 答案是[1,3,3]
fill 方法接受三个参数:num,start,end 。num 是你要填充的数字,start 是填充的起始位置,end 是终止位置。fill(3,1,3) 表示从索引 1 开始到索引 3 之间的元素填充为 3
~~3.5的结果是什么?答案是3
对于非数字,~~ 的结果为0,有个例外是 ~~ true 结果为 1
对于大于 0 的数,~~ 相当于是Math.floor
对于小于 0 的数,~~ 相当于是Math.ceil
- 如何判断一个数组的长度是奇数还是偶数?答案是
len & 1,len 为数组长度,奇数结果为true
只需 “&&” 前面是false,无论 “&&” 后面是 true 还是 false,结果都将返 “&&” 前面的值;
只需 “||” 前面为 false,不论 “||” 后面是 true 还是 false,都返回 “||” 后面的值。
- JSON.parse 和 JSON.stringify 的作用?
JSON.parse 将一个 json 转化为 JavaScript Object string 类型
JSON.stringify 将一个 string 转化为 json 类型
typeof null为什么等于"object",它的判断原理是什么
js 底层存储变量采用二进制,会在变量的机器码的低位 1-3 位存储其类型信息
000:对象
010:浮点数
100:字符串
110:布尔
1:整数
null:全0
undefined:-2^30
所以 typeof null 为显示为 object 对象。
- 如何判断一个元素能否为数组?
假设待判断对象为 arr ,有四种方法,一是
Object.prototype.toString.call(arr) == '[object Array]'或者者是
arr instanceof Array又或者是
Array.isArray(arr)第四种方法可以用
arr.__proto__.constructor == Array<<和>>运算符相关操作?
左移 << 将一个数的二进制表示向左移动 n 位,右边用0填充。
右移 >> 将一个数的二进制表示向右移 n 位,舍弃被移出的位。
简单点说,a >> n 相当于用 a 去除以 2 的 n 次方,所以 8 >> 1 结果为 4;
而 a << n 相当于用 a 去乘以 2 的 n 次方,所以 2 << 5 结果为 64
- function add() {} 和 var add = function (){} 解析时的区别
前者是执行前就会被解析(执行前就会读取函数名),然后者是执行过程中解析。所以 function add() {} 在执行里面的代码前就会读取函数名 add , 而 var add = function (){} 则是执行时逐渐解析。
- 执行以下代码,输出是什么?为什么?
var arr=[1,2,3,4,5];for(var i=0;i<arr.length;i++) { arr[i]=function(){ alert(i) } }arr[3]();答案是输出 i 的值为 5 。这个是与闭包有关的经常看到的问题,不论运行函数时传入的 i 是什么,最终输出的都是 for 循环结束时的 i 的值,也就是数组的长度,由于匿名函数里的这句
alert(i)执行的时候需要找到 i 变量,里面没有,那就只好去父级里找,而父级里的 i 在 for 循环,所以最终给到它的是循环的终止条件,也就是 i = 5 。处理方法也很简单,要么把 for() 里面的 var 换成 let ,形成块级作用域;要么使用闭包,匿名函数里在返回一个匿名函数,并且传入 i 立刻执行。
(完)
谢谢您的阅读,记得点个赞和关注。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » JavaScript 学习之路- JS 小测验