面试常考的js题目(一)
1、找出dom文档中某个元素下面的所有文字(面试写的一塌糊涂,回来重写的)
- 1、返回回数组形式的
function getText(ele) {
if (ele.nodeType === 3) {
return ele.data.replace(/[\s]/g, '');
}
var result = [];
var childNodes = ele.childNodes;
for (var i = 0; i < childNodes.length; i++) {
if (childNodes[i].nodeType === 3) {
// result += childNodes[i].data.replace(/[\s]/g, '');
result=result.concat(childNodes[i].data.replace(/[\s]/g, ''));
} else if (childNodes[i].nodeType === 1) {
// result += getText(childNodes[i]);
result=result.concat(getText(childNodes[i]));
}
}
console.log(result);
return result;
}
var elem = document.getElementById('text');
getText(elem)
- 2直接返回字符串的 (面试要求是字符串)
function getText(ele){
if (ele.nodeType === 3) {
return ele.data.replace(/[\s]/g, '');
}
var result='';
var childNodes = ele.childNodes;
for(var i=0;i<childNodes.length;i++){
if(childNodes[i].nodeType===3){
result += childNodes[i].data.replace(/[\s]/g, '');
}else if(childNodes[i].nodeType === 1){
result += getText(childNodes[i]);
}
}
console.log(result);
return result;
// console.log(ele.childNodes)
// console.log(childNodes[0].data.replace(/[\s]/g,''))
}
2、实现一个add函数要求add(1)(2)(3)返回6。 注意扩展。(函数的柯里化)
- 1、比较标准的实现
function add () {
var args = [].slice.call(arguments);
var fn = function () {
var arg_fn = [].slice.call(arguments);
console.log(args.concat(arg_fn)) ;
return add.apply(null, args.concat(arg_fn));
}
fn.valueOf = function() {
return args.reduce((a, b) => a + b);
}
return fn;
}
add(1)(2)(3)
- 2、利用闭包 返回值为函数 重要的一点是函数的valueOf 方法
function add(a){
var sum=a;
var result = function(b){
sum+=b;
console.log(sum)
return arguments.callee;
}
result.valueOf = function(){
return sum;
}
return result;
}
add(1)(3)(2)
注意:
以上代码中的重写函数的 valueOf 方法或者 toString 方法,在某些时候是会自己调用的,还牵扯到了类型转换。如果没有valueOf,return 的结果就是一个函数,得不到具体的值。
Object.prototype.valueOf()
valueOf() 方法返回指定对象的原始值。
JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值)。但是我们很少需要自己调用此函数,valueOf 方法一般都会被 JavaScript 自动调用。
Object.prototype.toString()
toString() 返回一个表示该对象的字符串。
每个对象都有一个 toString() 方法,当对象被表示为文本值时或者当以期望字符串的方式引用对象时,该方法被自动调用。
valueOf() 和 toString() 在特定的场合下会自行调用。
原始类型
javascript 的几种原始类型,除去 Object 和 Symbol,有如下几种原始类型:
Number
String
Boolean
Undefined
Null
在 JavaScript 进行对比或者各种运算的时候会把对象转换成这些类型,从而进行后续的操作。
面试常考的js题目(一)的更多相关文章
- 面试常考的js题目(三)
1.查找两个节点的最近的一个共同父节点,可以包括节点自身 function commonParentNode(oNode1, oNode2) { if(oNode1.contains(oNode2)) ...
- 面试常考的js题目(二)
1. 已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件: 返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数) 调用 a 之后,返回一个函数 ...
- 前端面试常考知识点---CSS
前端面试常考知识点---js 1.CSS3的新特性有哪些 点我查看 CSS3选择器 . CSS3边框与圆角 CSS3圆角border-radius:属性值由两个参数值构成: value1 / valu ...
- PHP面试常考之会话控制
你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...
- PHP面试常考内容之Memcache和Redis(2)
你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...
- PHP面试常考内容之Memcache和Redis(1)
你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...
- PHP面试常考内容之面向对象(3)
PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(2)"发表后,今天更新面向对象的最后一篇(3).需要(1),(2 ...
- PHP面试常考内容之面向对象(2)
PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...
- PHP面试常考内容之面向对象(1)
PHP中面向对象常考的知识点有以下几点,我将会从以下几点进行详细介绍说明,帮助你更好的应对PHP面试常考的面向对象相关的知识点和考题. 整个面向对象文章的结构涉及的内容模块有: 一.面向对象与面向过程 ...
随机推荐
- elasticsearch 单实例安装启动
elasticsearch 初次启动 下载 elasticsearch-6.3.2.tar.gz 创建目录 /usr/local/elasticsearch/ 解压 tar -zxf elastics ...
- 我的Linux vim配置文件
map <F9> :call SaveInputData()<CR> func! SaveInputData() exec "tabnew" exec 'n ...
- lamp 环境利用compser安装tp5
1.安装compser,这个可以去百度命令 2.cd到根目录 3.composer create-project --prefer-dist topthink/think tp(tp可以随意命名) 4 ...
- Vue+elementUI+springboot+mybatis demo教程(二)
安装配置node.js安装vue并搭建前台项目前台项目引入elementUI前台项目引入axios本篇主要记录前台项目搭建之前的环境准备,首先要安装node.js(node官网),进行相关配置等. 安 ...
- APT软件包管理-在线安装
APT (Advanced Packaging Tool高级软件包工具) 是一个强大的包管理系统,而那些图形化程序如 添加/删除 应用程序 都是建立 在它的基础之上的.有了dpkg后,Debian再次 ...
- Java-获取当前IP归属地
知道IP,获取当前IP归属地的Java程序: package Main; import java.io.BufferedReader; import java.io.DataOutputStream; ...
- pyqt5-实时刷新页面(QApplication.processEvents())
对于执行很耗时的程序来说,由于PyQt需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿,而如果需要执行这个耗时程序时不断的刷新界面.那么就可以使用QApplication.proces ...
- spring boot系列(二)spring boot web开发
json 接口开发 在以前的spring 开发的时候需要我们提供json接口的时候需要做如下配置: 1 添加jackjson等jar包 2 配置spring controller扫描 3 对接的方法添 ...
- Ubuntu下c程序运行原理
运行环境: 1.Vitural box下安装Ubuntu虚拟机 2.编译运行工具:gcc 3.编辑器:vim 主要过程: 1.利用vim编辑hello.c 2.编译和执行 (1)预处理阶段:使用 -E ...
- EL表达式的11隐含对象
EL表达式在不同范围如何取值: <% pageContext.setAttribute("book", "红楼梦"); request.setAttrib ...