一些js面试高频知识点的总结
第一部分:Object Prototypes (对象原型)
(1)定义一个方法,要求传入一个string类型的参数,然后将string的每个字符间加个空格返回,例如:
spacify('hello world') // => 'h e l l o w o r l d'
实现方案:
function spacify(string){
return string.split('').join(' ');
}
console.log(spacify('hello world')); //h e l l o w o r l d
(2)如何把(1)中定义的方法放入String对象的前面调用,例如:
'hello world'.spacify();
这里主要考察对function prototypes(方法原型)的理解,将此方法添加到String对象的原型上:
String.prototype.spacify = function(){
return this.split('').join(' ');
};
console.log('hello world'.spacify()); //h e l l o w o r l d
拓展考点:解释一下函数声明和函数表达式的区别
对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。
第二部分:参数 arguments
(1)先说说自己对参数(arguments)对象的理解。
arguments 对象只是与数组类似(它并不是Array 的实例),具有length属性用来检测传递参数的个数。 函数arguments对象
(2)定义一个未定义的log方法,用来代理处理console.log方法。
log('hello world')
容易想到的方法:
function log(msg) {
console.log(msg);
}
如果要求改变调用log的方式,传入多个参数,并且传入参数的个数是不定得,这里需要使用apply方法。解释一下apply和call的区别(接收参数形式的不同)。
function log(){
console.log.apply(console, arguments);
}
log('hello', 'world','beijing', 1); //hello world beijing 1
(3)给每一个log消息添加一个"(app)"的前辍,比如:
'(app) hello world'
arugments是一个伪数组,需要将他转化成为标准数组。通常方法是使用Array.prototype.slice方法。
function log(){
var args = [].slice.call(arguments); //[] 等价于 Array.prototype
args.unshift('(app)');
console.log.apply(console, args); //apply方法可以接收数组作为参数
}
log('hello', 'world'); //(app) hello world
第三部分:上下文和this
(1)给出以下例子,注意count属性不是只读取当前上下文的。求出以下的输出结果。
var User = {
count: 1,
getCount: function() {
return this.count;
}
};
console.log(User.getCount()); // var func = User.getCount;
console.log(func()); //undefined
下面一个得出undefined的原因是func是在winodw的上下文中被执行的,所以会访问不到count属性。
(2)怎么样保证User总是能访问到func的上下文,即返回正即的值:1
应该使用Function.prototype.bind方法,例如:
var func = User.getCount.bind(User);
console.log(func()); //
但是bind方法对老版本的浏览器不起作用时怎么去解决?有没有替代方法。
Function.prototype.bind = Function.prototype.bind || function(context){
var self = this;
return function(){
return self.apply(context, arguments);
};
}
参考来源: 如何面试前端工程师:GitHub 很重要
一些js面试高频知识点的总结的更多相关文章
- 「面试高频」二叉搜索树&双指针&贪心 算法题指北
本文将覆盖 「字符串处理」 + 「动态规划」 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和解析 开始之前,我们先看下会有哪些 ...
- 面试高频题:说一说对Spring和SpringMvc父子容器的理解?
引言 以前写了几篇关于SpringBoot的文章<面试高频题:springBoot自动装配的原理你能说出来吗>.<保姆级教程,手把手教你实现一个SpringBoot的starter& ...
- Java后端高频知识点学习笔记1---Java基础
Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...
- js进阶 9 js操作表单知识点总结
js进阶 9 js操作表单知识点总结 一.总结 一句话总结:熟记较常用的知识点,对于一些不太常用的知识点可以在使用的时候查阅相关资料,在使用和练习中去记忆. 1.表单中学到的元素的两个对象集合石什么? ...
- node.js 需要注意知识点
复习node.js 需要注意知识点--(重点) 2.1:参数传递获取造型 客户端脚手架(发) (参数传递) node.js(收) -发ajax this.axios.get(" ...
- C++面试高频题
作者:守望者1028链接:https://www.nowcoder.com/discuss/55353来源:牛客网 面试高频题: 校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我也忘记了 ...
- HTML&CSS面试高频考点(二)
HTML&CSS面试高频考点(一) ♥ 6. W3C盒模型与怪异盒模型 标准盒模型(W3C标准) 怪异盒模型(IE标准) 怪异盒模型下盒子的大小=width(content + bord ...
- js 面试知识点
基础 原型 原型链 作用域 闭包 异步 单线程 JS API DOM操作 AJAX 事件绑定 开发环境 版本管理 模块化 打包工具 运行环境 页面渲 ...
- js基础面试高频面点1:变量提升
一.什么是变量提升?var变量提升的底层原理是什么? 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 原理:引擎在读取js代码的过程中,分为两步,专业来说代码运行是分为预处理 ...
随机推荐
- golang 高效字符串拼接
https://blog.csdn.net/u012210379/article/details/45110705 虽然方便,但是使用+=操作符并不是在一个循环中往字符串末尾追加字符串最有效的方式,一 ...
- linux centos 恢复 还原 备份 Snapper 快照说明
为什么要使用Snapper快照? 我们可以想像以下场景: 1. 场景一:系统发生意外宕机,工程师无法快速定位问题,业务受到中断,客户十分不满意. 2. 场景二:项目会议上,就是否升级某软件到最新版本, ...
- 深入理解Java虚拟机(类文件结构)
深入理解Java虚拟机(类文件结构) 欢迎关注微信公众号:BaronTalk,获取更多精彩好文! 之前在阅读 ASM 文档时,对于已编译类的结构.方法描述符.访问标志.ACC_PUBLIC.ACC_P ...
- GROUP方法也是连贯操作方法之一
GROUP方法也是连贯操作方法之一,通常用于结合合计函数,根据一个或多个列对结果集进行分组 . group方法只有一个参数,并且只能使用字符串. 例如,我们都查询结果按照用户id进行分组统计: $th ...
- 17多校6 HDU - 6102
题意:给一个排列p,m次查询l,r,\(\sum_{i=l}^r\sum_{j=i+1}^r\sum_{k=j+1}^r[gcd(p_i,p_j)==p_k]p_k\) 题解:离线,枚举右端点,对于每 ...
- Android基础控件ListView基础操作
1.简介 基于Android基础控件ListView和自定义BaseAdapter适配器情况下,对ListView的数据删除和添加操作: public boolean add(E e) {//添加数据 ...
- collections中namedtuple的用法
我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p = (1, 2) 但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的.这时,namedtuple就派上了用 ...
- ES6之主要知识点(四)数值
引自:http://es6.ruanyifeng.com/#docs/number 1.Number.isFinite(),Number.isNaN() Number.isFinite(); // t ...
- es6 Promise 异步函数调用
开发很多的时候需要异步操作,常用的做法就是用回调函数,假如需要一连串的调用,并且后面一个调用依赖前一个返回的结果的时候,就得多层嵌套回调函数,比如下面这种情况: $('.animateEle').an ...
- 使用 MongoDB shell访问MongoDB