最近面试,遇到很多js相关的面试题,总结一下。

1、js 去重

  1. indexOf
  1. Array.prototype.unique = function(){
  2. var result = [];
  3. var len = this.length;
  4. for(var i = 0; i<len; i++){
  5. if(result.indexOf(this[i])<0){
  6. result.push(this[i]);
  7. }
  8. }
  9. return result;
  10. }
  11. var arr = [1,2,3,2,1,3,2,1];
  12. arr.unique();//arr = [1,2,3]
  • 在IE6、7、8不支持indexOf方法,可以在Array原型链上扩展indexOf方法
  1. if(!Array.prototype.indexOf){
  2. Array.prototype.indexOf = function(val){
  3. var value = this;
  4. for(var i =0; i < value.length; i++){
  5. if(value[i] == val) return i;
  6. }
  7. return -1;
  8. };
  9. }

2)数组先排序

  1. Array.prototype.unique = function(){
  2. this.sort();
  3. var result = [this[0]];
  4. var len = this.length;
  5. for(var i = 0; i<len; i++){
  6. if(this[i] !== result[result.length-1]){
  7. result.push(this[i]);
  8. }
  9. }
  10. return result;
  11. }
  12. var arr = [1,2,3,2,1,3,2,1];
  13. arr.unique();//arr = [1,2,3]

3)ES6新方法set和Array.from

  1. function unique(arr){
  2. return Array.from(new Set(arr));
  3. }
  • set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目,返回的是json对象
  • Array.from可以把类数组对象、可迭代对象转化为数组

2、js 字符串转为驼峰法

  1. function tansform(str){
  2. var re = /-(\w)/g;
  3. return str.replace(re,function($0,$1){//replace 中正则表达式$0,$1,$n等代表正则表达式内小括号的匹配值,从$1开始,$0代表正则表达式的整体值
  4. return $1.toUpperCase();
  5. });
  6. }
  7. var str = 'border-left-color';
  8. tansform(str);//borderLeftColor

3、查找字符串中最多的字符及个数

  1. function repeatCharNum(str){
  2. var arr = str.split('');
  3. str = arr.sort().join('');
  4. var re = /(\w)\1+/g;
  5. var index = 0;
  6. var value = '';
  7. str.replace(re,function($0,$1){
  8. if(index < $0.length){
  9. index = $0.length;
  10. value = $1 ;
  11. }
  12. });
  13. alert ('最多字符'+value+'出现的次数'+index);
  14. }

4、编写一个函数,将输入的参数中的数字字符追加为一个数字字符串,参数输入不确定

  1. function getStrChange(){
  2. var len = arguments.length;//参数不确定时使用arguments关键字
  3. var re = /^\d+$/;
  4. var str = '';debugger;
  5. for(var i =0; i< len; i++){
  6. if(!(re.test(arguments[i]))){
  7. continue;
  8. }
  9. if(i == len-1){
  10. str = str+arguments[i];
  11. }else{
  12. str = str+arguments[i]+',';
  13. }
  14. }
  15. return str;
  16. }
  17. alert(getStrChange('1','a','45','b','3',1));//('1,45,3,1')

5、var和function的预解析问题,以及变量和function的先后顺序的问题

  1. // 以下代码执行输出结果是什么
  2. function b () {
  3. console.log(a);// function a(){}
  4. var a = 10;
  5. function a() {};
  6. a = 100;
  7. console.log(a);//100
  8. }
  9. b();
  10. function c () {
  11. console.log(a);//function a(){}
  12. function a() {};
  13. var a = 10;
  14. a = 100;
  15. console.log(a);//100
  16. }
  17. c();
  18. (function d (num) {
  19. console.log(num);//100
  20. var num = 10;
  21. }(100))
  22. (function e (num) {
  23. console.log(num);//function num () {};
  24. var num = 10;
  25. function num () {};
  26. }(100))
  27. (function f (num) {
  28. function num () {};
  29. console.log(num);//function num () {};
  30. var num =10
  31. console.log(num);//10
  32. }(100))
  33. //仍然是预解析(在与解析过程中还要考虑一下当前变量的作用于)
  34. function m () {
  35. console.log(a1); // underfined
  36. console.log(a2); // underfined
  37. console.log(b1); // underfined
  38. console.log(b2); // underfined
  39. if(false) {
  40. function b1 (){};
  41. var a1 = 10;
  42. }
  43. if(true) {
  44. function b2 (){};
  45. var a2 = 10;
  46. }
  47. console.log(a1); // underfined
  48. console.log(a2); // 10
  49. console.log(b1); // underfined
  50. console.log(b2); // function
  51. }
  52. m();
  53. function n() {
  54. if(2>1) {
  55. arr = 10;
  56. brr = 10;
  57. let arr;//要在严格模式'use strict'下运行
  58. var brr;
  59. console.log(arr);
  60. console.log(brr);
  61. }
  62. }
  63. n(); // ReferenceError
  • 函数声明:function a(){}可以提前解析;
  • 函数表达式:var b = function a(){} : 命名函数表达式

    var b = function (){} :匿名函数表达式

    (function a(){}) : 表达式

    位运算符:(为了区分函数表达式和函数声明)

    ~funtion a(){} : 表达式

    -funtion a(){} : 表达式

    +funtion a(){} : 表达式

    !funtion a(){} : 表达式

    (不可以被提前解析)
  • 函数表达式和函数声明的区别:函数声明可以提前被解析,函数表达式不可以,需要在引用前提前声明;函数表达式可以直接后面加括号执行,函数声明不可以。
  • let关键字要在严格模式'use strict'下运行

6、判断数据类型

  1. function gettype(nm){
  2. return Object.prototype.toString.call(nm);
  3. }
  4. console.log(gettype(3)); //[object number]
  • js基础数据类型:number string null undefined string boolean,存放在栈内存
  • js引用数据类型:Object (Array,Date,RegExp,Function),存放在堆内存

7、如何将arguments转为array

  1. function changeArg(arguments){
  2. return Array.prototype.slice.apply(arguments);
  3. }

8、如何判断array对象

可以使用Array.isArray()或者Object.prototype.toString.call()判断

9、原生dom实现删除dom结点

  1. function deleteNode(node){
  2. if(!node) return;
  3. if(node.parentNode){
  4. node.parentNode.removeChild(node);
  5. }
  6. }

10、给button绑定click事件

  1. var x = document.getElementById("myBtn");
  2. if (x.addEventListener) { //所有主流浏览器,除了 IE 8 及更早 IE版本
  3. x.addEventListener("click", myFunction);
  4. } else if (x.attachEvent) { // IE 8 及更早 IE 版本
  5. x.attachEvent("onclick", myFunction);
  6. }
  • 还可以用onclick()绑定,但是onclick()混合了js和html,不建议使用。
  • addEventListener("click", function,useCapture),useCapture默认false,代表事件冒泡阶段执行,true代表事件捕获阶段执行。
  • addEventListener和onclick的区别:addEventListener可以添加多个事件,不会被覆盖;onclick只可以一个事件,重复添加,后面一个会覆盖前面一个的事件。

11、排序算法

1)冒泡排序

  1. function bubbleSort(arr){
  2. for(var i = 0;i< arr.length-1;i++){
  3. for(j=i+1;j<arr.length;j++){
  4. if(arr[i]>arr[j]){
  5. var temp = arr[i];
  6. arr[i] = arr[j];
  7. arr[j] = temp;
  8. }
  9. }
  10. }
  11. return arr;
  12. }

2)快速排序

  1. function quickSort(arr){
  2. if(arr.length<=1){
  3. return arr;
  4. }
  5. var len = Math.floor(arr.length/2);
  6. var cur = arr.splice(len,1);
  7. var left = [];
  8. var right = [];
  9. for(var i=0;i<arr.length;i++){
  10. if(cur>arr[i]){
  11. left.push(arr[i]);
  12. }else{
  13. right.push(arr[i]);
  14. }
  15. }
  16. return quickSort(left).concat(cur,quickSort(right));
  17. }

面试中遇到的原生js题总结的更多相关文章

  1. <<< 网页中如何利用原生js和jquery储存cookie

    javascript当中的cookie机制,使应用达到了真正的全局变量的要求,cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由Java ...

  2. 原生JS面试题

    面试中遇到的原生js题总结   1.js 去重1) indexOf Array.prototype.unique = function(){ var result = []; var len = th ...

  3. Java面试中笔试题——Java代码真题,这些题会做,笔试完全可拿下!

    大家好,我是上海尚学堂Java培训老师,以下这些Java笔试真题是上海尚学堂Java学员在找工作中笔试遇到的真题.现在分享出来,也写了参考答案,供大家学习借鉴.想要更多学习资料和视频请留言联系或者上海 ...

  4. 使用原生JS进行字符串转对象

    字符串转对象 目的 工作中如果需要原生 JS 完成字符转对象的话可以通过 JSON.parse(str), 但是这个方法是ES5中才出现, 如果需要兼容低版本就需要其它方法 使用原生 JS 解决字符串 ...

  5. 【面试篇】寒冬求职季之你必须要懂的原生JS(中)

    互联网寒冬之际,各大公司都缩减了HC,甚至是采取了“裁员”措施,在这样的大环境之下,想要获得一份更好的工作,必然需要付出更多的努力. 一年前,也许你搞清楚闭包,this,原型链,就能获得认可.但是现在 ...

  6. 前端js面试中的常见的算法问题

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

  7. 面试奇遇 -- 原生JS

    最近几日去参加一些面试,多多少少有一些收获. 现将遇到的一些面试题,做一下分析和总结. 1.使用原生JS,不能使用递归,查找dom中所有以“<com-”开头的自定义标签tagName. < ...

  8. 原生JS中apply()方法的一个值得注意的用法

    今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...

  9. java面试中的智力题

    智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇 ...

随机推荐

  1. CMDB资产管理系统开发【day26】:admin action

    本节目标 审核写到数据库,我就单独写一个如下的 页面 单机go后就跳转到如下图界面,我们这节课的目标就是写一个这样的页面 asset\admin.py部分代码 注释如下: class NewAsset ...

  2. 使用 https://git.io 缩短 a GitHub.com URL.

    curl -i https://git.io -F 'url=https://develon2015.github.io' -F 'code=develon' 现在点击 http://git.io/d ...

  3. [物理学与PDEs]第1章习题1 无限长直线的电场强度与电势

    设有一均匀分布着电荷的无限长直线, 其上的电荷线密度 (即单位长度上的电荷量) 为 $\sigma$. 试求该直线所形成的电场的电场强度及电势. 解答: 设空间上点 $P$ 到直线的距离为 $r$, ...

  4. 爬取qq音乐巅峰榜---内地音乐的榜单

    import requestsimport jsonimport sys for i in range(0,10): url = "https://szc.y.qq.com/v8/fcg-b ...

  5. spring+springMVC+mybatis简单整合

    spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...

  6. MySQL学习9 - 单表查询

    一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...

  7. Shell 自动化部署免密登录

    1 .配置主机名称 参考:Linux 修改主机名 和 ip 映射关系 2 . 编写脚本 root.sh 内容 #!/bin/bash SERVERS="hadoop0 hadoop1 had ...

  8. 残差网络ResNet笔记

    发现博客园也可以支持Markdown,就把我之前写的博客搬过来了- 欢迎转载,请注明出处:http://www.cnblogs.com/alanma/p/6877166.html 下面是正文: Dee ...

  9. Spring系列(五) 容器初始化过程源码

    IoC/DI 的概念 容器是Spring的核心之一(另一个核心是AOP). 有了容器, IOC才可能实现. 什么使IoC? IoC就是将类自身管理的与其由依赖关系的对象的创建/关联和管理交予容器实现, ...

  10. MS SQL Server 查询元数据

    use test -- 查询数据库中所有的表和架构名称select SCHEMA_NAME(schema_id) as table_schema_name, name as table_name fr ...