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. LeetCode---Bit Manipulation && Design

    **401. Binary Watch 思路:产生两个list分别代表小时和分钟,然后遍历 public List<String> readBinaryWatch(int num) { L ...

  2. 黑马vue---13、事件修饰符的介绍

    黑马vue---13.事件修饰符的介绍 一.总结 一句话总结: .stop 阻止冒泡:input type="button" value="戳他" @click ...

  3. PM2工作原理

    PM2工作原理 要理解pm2就要理解god和santan的关系,god和santan的关系就相当于盖娅和黑底斯在pm2中的01世界中,每一行代码每一个字节都安静的工作god就是Daemon进程 守护进 ...

  4. 【闭包】JS闭包深入理解

    先看题目代码: 1 2 3 4 5 6 7 8 9 10 11 12 function fun(n,o) {  console.log(o)  return {   fun:function(m){ ...

  5. LC 712. Minimum ASCII Delete Sum for Two Strings

    Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...

  6. 运维之思科篇——NAT基础配置

    一. NAT(网络地址转换) 1. 作用:通过将内部网络的私有IP地址翻译成全球唯一的公网IP地址,使内部网络可以连接到互联网等外部网络上. 2. 优点: 节省公有合法IP地址 处理地址重叠 增强灵活 ...

  7. ControlTemplate in WPF —— DataGrid

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  8. kubernetes排错系列:(二)、运行很久的kubernetes集群,创建出来的pod都是pending状态

    1.查看pod信息 # 查看pod 报错信息kubectl get pods发现pod的ip没有 生成,也没有分配到某个node节点 # 查看pod详细时间kubectl describe pods发 ...

  9. Spring RedisTemplate常用方法(List,Hash)

    @Autowired private RedisTemplate<String, String> redisTemplate; @Override public List<Strin ...

  10. 【转】Spark History Server 架构原理介绍

    [From]https://blog.csdn.net/u013332124/article/details/88350345 Spark History Server 是spark内置的一个http ...