• 面试常考的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 进行对比或者各种运算的时候会把对象转换成这些类型,从而进行后续的操作。

  • 相关阅读:
    2020年天梯赛补题报告
    补提报告...
    2020.11.14天梯赛练习*6 补题
    2020-11-08补题报告
    2020-10-30 — 补题报告
    10-24 补题
    2020.10.17天梯赛练习 和 16 号个人赛 补题报告
    elasticsearch DQL 有关表达式的设计
    tab键和空格键
    emacs配置python开发环境
  • 原文地址:https://www.cnblogs.com/csuwujing/p/9772815.html
Copyright © 2020-2023  润新知