面試常考的js題目(一)

一、找出dom文檔中某個元素下面的全部文字(面試寫的一塌糊塗,回來重寫的)
  • 一、返回回數組形式的
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,''))
}
二、實現一個add函數要求add(1)(2)(3)返回6。 注意擴展。(函數的柯里化)
  • 一、比較標準的實現
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)
  • 二、利用閉包 返回值爲函數 重要的一點是函數的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 的結果就是一個函數,得不到具體的值。javascript

Object.prototype.valueOf() valueOf() 方法返回指定對象的原始值。java

JavaScript 調用 valueOf() 方法用來把對象轉換成原始類型的值(數值、字符串和布爾值)。可是咱們不多須要本身調用此函數,valueOf 方法通常都會被 JavaScript 自動調用。node

Object.prototype.toString() toString() 返回一個表示該對象的字符串。面試

每一個對象都有一個 toString() 方法,當對象被表示爲文本值時或者當以指望字符串的方式引用對象時,該方法被自動調用。數組

valueOf() 和 toString() 在特定的場合下會自行調用。閉包

原始類型 javascript 的幾種原始類型,除去 Object 和 Symbol,有以下幾種原始類型:app

Number String Boolean Undefined Null 在 JavaScript 進行對比或者各類運算的時候會把對象轉換成這些類型,從而進行後續的操做。dom

相關文章
相關標籤/搜索