javascript 面试题

面试题:

1、下面代码运行结果

var bl = false;

$.ajax(url, {
    //...
    success: function(){
        bl = true;
    }
});

while ( !bl ) {
    alert( bl );
}
alert( bl );

// 结果大家自己去想,这道题是面试官临时写的,简单直接,很好的考察你是否理解javascript中的运行机制,很棒的一道面试题

 

2、扩展Array原型,编写一个去除数组重复项的方法

// 算法一,两层循环,性能差
Array.prototype.unique = function(){
    var len = this.length, i;

    // 两两比较(数组长度大于1)
    while ( --len > 0 ) {
        i = len;
        while ( --i >= 0 ) {                    // 前一项索引最小为0
            if ( this[len] === this[i] ) {      // 最后一项与前一项进行比较
                //this.splice(i, 1);            // this.length自动减一,删除前面的重复项
                this.splice(len, 1);            // this.length自动减一,删除后面的重复项
                i--;
            }
        }
    }
    return this;
};

// 算法二,性能优化
Array.prototype.unique = function(){
    var i, key, len = this.length,
        cache = {},        // 缓存对象
        ret = [];    // 要返回的数组

    for ( i = 0; i < len; i++ ) {
        key = typeof this[i] + this[i];
        if ( cache[key] !== 1 ) {
            cache[key] = 1;
            ret.push( this[i] );
        }
    }
    
    return ret;;
};

// 解决方法三,直接使用jQuery.unique工具函数
var arr = [1,3,4,6,9,10,4,6];
arr = jQuery.unique( arr );    // [1, 3, 4, 6, 9, 10]

 

3、手动实现原生数组Array.prototype.sort方法的实现

Array.prototype.sort = function( filter ){
    var i, temp, len = this.length;

    // 两两比较(数组长度大于1)
    while ( --len > 0 ) {
        i = len;        
        while ( --i >= 0 ) {                    // 前一项索引最小为0
            temp = this[len];
            
            // 不传递过滤回调,则默认是从小到大排序
            // 回调函数的返回值大于0,则是从小到大排序,否则不进行操作,默认为从大到小
            if ( filter || filter && filter(this[len], this[i]) ) {
                this[len] = this[i];
                this[i] = temp;
            }
        }
    }
    return this;    
};

 

4、其他算术题

// 数的阶乘
function factorial( num ) {
    var ret = num;
    while ( --num ) {
        ret = ret * num;
    }
    return ret;
}
factorial( 10 ); // 3628800

// 对数值型值保留2位小数
var num = 100.567;
var num2 = 100;
num.toFixed(2); //    100.57
num2.toFixed(2); // 100.00


// 求一个数组中随机出现的项
function randomArr ( arr ) {
    // Math.random()           最小值接近0,最大接近1,0.00000000000001    0.9999999999999
    // Math.random()*length    最小值接近0,最大接近length
    // Math.floor( Math.random() * arr.length ) 舍去小数部分,得到的就是随机出现的数组索引
    var randomIdx = Math.floor( Math.random() * arr.length );
    return arr[randomIdx];    // 返回随机项
}

javascript 面试题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。