摘要:整理最近的一些面试题请问有哪些数据数据类型,并画出内存图有种简单的数据类型也称为基本数据类型复杂的数据类型即引用数据类型包含对象,对象和等举个例子引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。实际上改变的是堆内存对象。
我们在js的学习中,往往很多东西看过之后,一段时间不用,就忘记了。或者当时就没有深入的理解,能促使我们不断深入学习的动力最好的办法往往参加些面试,能找到自己的不足也能加深之前学的知识点的记忆。
整理最近的一些面试题
(1)请问js有哪些数据数据类型,并画出内存图
js有5种简单的数据类型(也称为基本数据类型)Undefined、Null、Boolean、Number、String
复杂的数据类型(即引用数据类型) 包含Object对象,array对象和Function,Date等
举个例子
引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。
var obj1 = new Object(); var obj2 = obj1; obj2.name = "我有名字了"; console.log(obj1.name); // 我有名字了
obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。
(2)下面代码输出结果
for (var i = 1; i <= 4; i++) { console.log(i) setTimeout(function timer() { console.log(i) // 5,5,5,5,5 }, 1000) }
答案:// 5,5,5,5,5
(3)下面代码输出结果
var foo = "hello"; (function() { var bar = " word" console.log(foo + bar) })() console.log(foo + bar)
//答案:报错bar is not defined
(4)下面代码输出结果
var bar = true console.log(bar + 0) //1 console.log(bar + "xyz") //truexyz console.log(bar + true) //2 console.log(bar + false) //1 console.log(undefined == null) //true console.log(1 == true) //true console.log(2 == true) //false console.log(0 == false) //true console.log(0 == "") //true console.log(NaN == NaN) //false console.log([] == false) //true console.log([] == ![]) //true
补充一些可能会考到的例子
// Boolean + Number -> 数字相加 true + 1 // 2 // Boolean + Boolean -> 数字相加 false + false // 0 // Number + String -> 字符串连接 5 + "foo" // "5foo" // String + Boolean -> 字符串连接 "foo" + false // "foofalse" // String + String -> 字符串连接 "foo" + "bar" // "foobar" 减法 (-) 减法运算符使两个操作数相减,结果是它们的差值。减法字符串都会试图转成数字 -"1"//1 5 - 3 // 2 3 - 5 // -2 "15"-2 //13 "foo" - 3 // NaN "5" + 3 // 53 如果字符在前面,并且后面是加号(+)就是字符串拼接 +3 // 3 +"3" // 3 +true // 1 +false // 0 +null // 0 +function(val){ return val;} //NaN
(5)假设有这样一个数组[1,2,3,4,5],现在想要左移或者右移N位,比如左移1位变成[2,3,4,5,1],右移1位变成[5,1,2,3,4],请写一个函数实现
思路:假如左移的情况,如果左移2位,把原数组的左边2个元素删除,并把删除的2个元素存储在新建的数组中,最后把原数组删除后的数组与删除的数组连接起来,右移的情况也是把右移数量的元素删除,并把删除后的元素存储起来,最后连接。
完整的例子:
var data = ["blue", "green", "red", "purple"]; var dataLength = data.length var deleteData; var resultData; function move(n) { if (n >= 0) { deleteData = data.splice(0, n); resultData = data.concat(deleteData); console.log(resultData); } else { deleteData = data.splice(dataLength + n, -n); resultData = deleteData.concat(data) console.log(resultData); } } move(3)
(6)有这样一个URL http://www.baidu.com/item.htm...,请写一段js程序提取url中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中
思路:
1、找出“?”的index 位置(url.indexOf("?"))
2、截取“?”后面的字符串(可以使用slice,substring,substr)
3、使用split把字符串分隔成字符串数组(str.split("&"))
4、循环字符串数组,在循环内部主要代码
for (i = 0; i < data.length; i++) { var data1 = data[i]; data2 = data1.split("=") key = data2[0]; value = data2[1]; JosnObject.key = value }
如有疑问请关注微信公众号:前端之攻略,此公众号我也会定期更新前端知识。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96727.html
摘要:收集的一些前端面试题从面试题发现不足,进而查漏补缺,比通过面试更难得及各大互联网公司前端笔试面试题篇及各大互联网公司前端笔试面试题篇面试题个和个经典面试题前端开发面试题如何面试前端工程师很重要个变态题解析如何通过饿了么面试轻 收集的一些前端面试题 从面试题发现不足,进而查漏补缺,比通过面试更难得 1 BAT及各大互联网公司2014前端笔试面试题--Html,Css篇 2 BAT...
摘要:收集的一些前端面试题从面试题发现不足,进而查漏补缺,比通过面试更难得及各大互联网公司前端笔试面试题篇及各大互联网公司前端笔试面试题篇面试题个和个经典面试题前端开发面试题如何面试前端工程师很重要个变态题解析如何通过饿了么面试轻 收集的一些前端面试题 从面试题发现不足,进而查漏补缺,比通过面试更难得 1 BAT及各大互联网公司2014前端笔试面试题--Html,Css篇 2 BAT...
摘要:字囊括上百个前端面试题的项目开源了这个项目是什么项目内容这个项目目前在上刚刚开源主要内容如下前端面试题主要整理了高频且有一定难度的前端面试题对这些面试题进行解读前端原理详解针对一些有一定难度面试题涉及的知识点进行详解比如涉及的编译原理响应式 20W字囊括上百个前端面试题的项目开源了 这个项目是什么? 项目内容 这个项目目前在GitHub上刚刚开源,主要内容如下: 前端面试题: 主要整...
阅读 3954·2021-11-24 09:38
阅读 1423·2021-11-19 09:40
阅读 2780·2021-11-18 10:02
阅读 3692·2021-11-09 09:46
阅读 1769·2021-09-22 15:27
阅读 3112·2019-08-29 15:24
阅读 999·2019-08-29 12:40
阅读 1686·2019-08-28 18:24