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题目(一)的更多相关文章

  1. 面试常考的js题目(三)

    1.查找两个节点的最近的一个共同父节点,可以包括节点自身 function commonParentNode(oNode1, oNode2) { if(oNode1.contains(oNode2)) ...

  2. 面试常考的js题目(二)

    1. 已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件: 返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数) 调用 a 之后,返回一个函数 ...

  3. 前端面试常考知识点---CSS

    前端面试常考知识点---js 1.CSS3的新特性有哪些 点我查看 CSS3选择器 . CSS3边框与圆角 CSS3圆角border-radius:属性值由两个参数值构成: value1 / valu ...

  4. PHP面试常考之会话控制

    你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...

  5. PHP面试常考内容之Memcache和Redis(2)

    你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...

  6. PHP面试常考内容之Memcache和Redis(1)

    你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...

  7. PHP面试常考内容之面向对象(3)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(2)"发表后,今天更新面向对象的最后一篇(3).需要(1),(2 ...

  8. PHP面试常考内容之面向对象(2)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...

  9. PHP面试常考内容之面向对象(1)

    PHP中面向对象常考的知识点有以下几点,我将会从以下几点进行详细介绍说明,帮助你更好的应对PHP面试常考的面向对象相关的知识点和考题. 整个面向对象文章的结构涉及的内容模块有: 一.面向对象与面向过程 ...

随机推荐

  1. Spring 自动注入,管理JavaBean

    声明一个类Pig,类上使用注解@Component 声明一个类Father,类上使用注解@Component 一个成员变量,使用注解@Autowired 在Spring的xml文件中,配置自动扫描注解 ...

  2. Linux上安装Python3

    1. 安装支持包 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel ope ...

  3. 设计模式--观察者模式--python

    观察者模式: 对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 主要解决: 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面.将这二者封装在 ...

  4. shell做成csv文件

    echo a,b,c,d >aa.csv 其实就是用逗号做分隔符

  5. 阶段3 3.SpringMVC·_03.SpringMVC常用注解_7 ModelAttribute注解

    这个注解可以作用在方法上,也可以作用在参数上 演示 user里面有三个属性, 表单只提交了两个属性.缺少了date属性 date没有获取到值因为也没提交这个值. 下面返回的user对象.上面就会拿到 ...

  6. ASP.NET解决跨域问题

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. 七十七:flask.Restful之flask-Restful参数验证

    flask_restful插件提供了reqparse来做类似WTForms的验证功能来校验数据,add_argument可以指定这个字段的名字.数据类型等1.default:默认值,若没有传入此次参数 ...

  8. C++数据结构之哈希表

    哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方.键可以对应多个值(即哈希冲突),值根据相应的hash公式存入对应的键中. 哈希函数的构造要求 ...

  9. spring boot 整合redis

    spring boot 中配置redis1 在pom.xml中增加相关包依赖:<dependency> <groupId>org.springframework.boot< ...

  10. debian中安装pip

    sudo apt upate sudo apt-get install python3-pip