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

posted @ 2018-10-11 15:41  csuwujing  阅读(435)  评论(0编辑  收藏  举报