#JS面试题
Buildy_j
只是一个小白程序猿啦!
展开
-
JS 谈谈你对闭包的理解?
闭包的定义是:那些引用了另一个函数作用域中的变量的函数。——《红宝书》书中举了一个经典的例子:function compare(name) { return function(obj1,obj2) { let value1 = obj1[name]; let value2 = obj2[name]; if (value1 > value2) { return 1 }else if(value1 &原创 2021-10-20 01:54:33 · 196 阅读 · 0 评论 -
JS 1–100000个数字,丢了两个数后打乱顺序怎么找到丢的两个数字?
这题感觉靠脸,99998个数字还是打乱的数组,如果先排序或者其他整理数据结构的方法,然后再遍历十分浪费性能。假如这剩下99998个数字存放在arr数组里,那么const target = []for (let i = 1; i <= 100000; i++) { if (!arr.includes(i)) { target.push(i); if(target.length === 2){ break; }原创 2021-10-09 01:34:09 · 328 阅读 · 0 评论 -
JS 在10000下不重复的数字中随机抽取5000不重复样本,多次操作获得的不同结果
要求:arr为一个1至10000的数组,随机抽取5000个不同的数据,放到target数组里,并且arr最后剩下未抽取的数。①首先创建一个数组arr包含1-10000的数字②打乱顺序数组arr的顺序,然后arr.splice(0,5000)给target赋值,简单粗暴。或者用for循环,使用splice方法随机对arr数组任意index截取一位,并且push到target数组中。方法有很多。const arr = new Array(10000);for (let i = 0; i &l原创 2021-10-09 01:20:01 · 627 阅读 · 0 评论 -
JS 封装函数:数字转换为中文,或反之
要求:change(123) 返回 '一二三';change('一二三'),返回123function change(arg) { let key = '一二三四五六七八九十'.split('') if (typeof arg === 'number') { let reg = /\d/g; arg = arg.toString().replace(reg, function (num) { return key[+num -原创 2021-10-07 00:51:20 · 147 阅读 · 0 评论 -
JavaScript 对象有哪些原生方法,列举一下
toString : 返回所有势力所属类的信息,通常用这个检测数据类型;Object.prototype.toString.call() hasOwnProperty : 检测某个属性是否是这个对象的私有属性; in:检测某个属性是否是这个对象的属性; propertyIsEnumerable:对象的某个属性是否是可枚举的;...转载 2021-10-06 23:57:52 · 152 阅读 · 0 评论 -
JS 说一说你知道的数组方法,哪些改变了原数组?
改变原数组的方法:pop()、push()、reverse()、shift()、sort()、splice()、unshift() 不改变原数组的方法:concat()、join()、slice()、toString()原创 2021-10-06 23:51:30 · 279 阅读 · 0 评论 -
JS 计算一组数据的平均数
要求:average(args)返回一个Number类型的平均数,保留一位小数。function average(...arg) { let sum = 0; arg.forEach(val => { sum += val }) return +(sum / arg.length).toFixed(1);}原创 2021-10-06 23:48:49 · 565 阅读 · 0 评论 -
JavaScript 数组去重
function quchong(arr) { if (!Array.isArray(arr)) { return arr; } const temp = []; for (let i = 0; i < arr.length; i++) { if (temp.includes(arr[i])) { arr.splice(i, 1); i--; } else { .原创 2021-10-06 23:39:05 · 59 阅读 · 0 评论 -
JavaScript null和undefined的区别?
undefined是一个表示"无"的原始值,转为数值时为NaN当声明的变量还未被初始化时,变量的默认值为undefinednull用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象null表示一个对象被定义了,值为“空值”;undefined表示不存在这个值。undefinedundefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:变量被声明了,但没有赋值时,就等于 undefined 调用函数时,应该提供的参数没有提供,该参数等于..转载 2021-10-06 00:42:43 · 126 阅读 · 0 评论 -
JS 封装一个给定整数范围的随机数生成器函数
要求:random(max,min)返回max-min范围内的随机产生一个随机数。function ramdom(max, min) { return (Math.round(max - min) + min);}原创 2021-10-05 23:57:39 · 162 阅读 · 0 评论 -
简述html、css、js、函数代码注释的写法
HTML注释: <!-- HTML注释 -->CSS注释: /* css注释 */JS注释: // js单行代码注释 /* js多行代码注释 */JS函数描述注释:/** * 这是一个模板函数注释 * @param {String | String[]} str - 必传参数,传参类型为String|String[] * @param {Array|Object} op...原创 2021-09-24 02:17:55 · 247 阅读 · 0 评论 -
JavaScript 中的全局变量与局部变量的区别?
全局变量:是在全局作用域(即函数作用域及块级作用域以外的)中被定义的变量,其作用域是整个宿主环境。使用var关键字在全局作用域定义变量时,该变量作为windows对象的属性被存储。当宿主环境被关闭销毁时,才释放存储空间。局部变量:是在局部作用域(即函数作用域或块级作用域之内的)中被定义的变量,其作用域是函数内部或块级作用域内部。当 函数或块 执行完毕后,会被垃圾回收(创建闭包的情况除外)来释放存储空间。当一个全局变量指向一个闭包时,把该变量值置为null,即销毁对闭包的引用。则闭包中的数据会在下一次垃圾原创 2021-09-23 17:54:24 · 409 阅读 · 0 评论 -
true+11+null+9+undefined+“str“+false+null+9+[] 结果是?
答:'NaNstrfalsenull9'。运算是从左至右的。true + 11 ==1 + 11 == 12//boolean值被隐式Number包装成number类型;12 + null == 12 + 0 // null值被隐式Number包装成number类型;12 + 9 == 21 // number之间的运算;21 + undefined == NaN // underfined + 任何数据类型结果都是NaN(...原创 2021-09-23 00:49:24 · 65 阅读 · 0 评论 -
JS中函数如何绑定?(或者问this指向如何改变?)有何不同?
call函数:Fn.call(thisTarget, arguement1?, arguement2? ...)thisTarget必传的,实参逐个传,并用 ' , ' 隔开。 Object.prototype.toString.call(123) // [object Number]apply函数:Fn.apply(thisTarget, [arguement1, arguement2,...]?) Object.prototype.toString.apply(123) /.原创 2021-09-23 00:25:12 · 48 阅读 · 0 评论 -
JavaScript 如何实现预加载一张图片
预加载使用情景:当网络状态不好时,目标图片加载缓慢,此时需要一张体积小的图片充当占位符,一是告诉用户知道这个地方有个图片这一信息,二是页面更美观一些不至于留一块大白。核心:监听DOM的load事件(在DOM对象已加载时,发生此事件)。<body> <img src="./red.png" /> <script> const oImg = document.querySelector('img'); ...原创 2021-09-22 23:45:08 · 310 阅读 · 0 评论 -
JS如何遍历数组与对象?
通用:方法一:for-in循环 for (const key in data) { if (Object.hasOwnProperty.call(data, key)) { console.log(key, data[key]); } }方法二:Object.keys + forEach数组方法 Object.keys(data).forEach(key => con原创 2021-09-22 17:54:21 · 263 阅读 · 0 评论 -
用JS封装返回斐波那契数列第n位数的函数
要求:不使用全局变量,调用该函数并传数字n,需做严谨性判断,结果返回第n位数。方法一:使用递归的思想,动态规划的知识。第n项是第n-1项和第n-2项的和。 function Feibo(n) { if (typeof n !== 'number' || n <= 0) return false; if (n === 1 || n === 2) return 1; return Feibo(n - 1)原创 2021-09-22 17:00:26 · 253 阅读 · 0 评论 -
JavaScript 如何让alert弹出框中的信息换行?
核心:使用转义字符。 window.alert('L\nO\nV\nE');测试一下:备注:转义字符 含义 \n 换行 \t 制表符 \b 空格 \r 回车 \f 换页符 \ 反斜杠 ' 单引号 '' 双引号 \0nnn 八进制代码 nnn 表示的字符( n 是 0 到 7 中的一个八进制数字) \xnn 十六进制代码 nn 表示的字符( n 是 0 到 F 中...原创 2021-09-22 16:30:57 · 2150 阅读 · 0 评论 -
用JS封装一个播报今天是X年X月X日 星期X X时X分X秒 X毫秒的函数
需要注意的坑,Date的实例方法 getMonth 与 getDay, 月份从0开始算起所以结果要+1,周日的值是0 。 function today() { let today = new Date(); let year = today.getFullYear(), mouth = today.getMonth() + 1, day = today.getDate(),原创 2021-09-22 16:20:26 · 130 阅读 · 0 评论 -
JavaScript 中有几种数据类型?
原始值类型:number、string、boolean、undefined、null、bigint、symbol(原始值数据存储在栈(stack)里,数据简单,占据空间小、大小固定)引用值类型:array、object、function、date、regexp(引用的指针存储在栈(stack)里,数据体储存在堆(heap)里,占据空间大,大小不固定)可以封装一个自制typeof,核心是调用 Object.prototype.toString.call() const _.原创 2021-09-22 15:54:35 · 87 阅读 · 0 评论