欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js常用的一些面试题。

程序员文章站 2022-04-11 18:57:43
...

1.如果我们使用JavaScript的"关联数组",我们怎么计算"关联数组"的长度?

var counterArray = {
    A : 3,
    B : 4
};
counterArray["C"] = 1;
答案:Object.keys(counterArray).length

2.什么是 instanceof 操作符?下面代码输出什么?

 

function foo(){ 
  return foo; 
}
console.log(new foo() instanceof foo);
答:instanceof操作符用来判断是否当前对象是特定类的对象。instanceof是检测对象的原型链是否指向构造函数的prototype对象的
例如:
function Animal(){    //或者不写return语句
    return this;
}
var dog = new Animal();
dog instanceof Animal // 输出 : true
但是,这里的foo定义为
function foo(){ 
  return foo; 
}
所以 new foo() instanceof foo 返回 false

3.下面代码输出什么?

var salary = "1000$";
(function () {    
    console.log("Original salary was " + salary);    
    var salary = "5000$";    
    console.log("My New Salary " + salary);
})();

答: Original salary was undefined
    My New Salary 5000$
   考察的是变量提升。等价于以下代码
    var salary = "1000$";
    (function () {     
    var salary ;     
    console.log("Original salary was " + salary);
      salary = "5000$";     
    console.log("My New Salary " + salary);
   })();
4.两种函数声明有什么区别?
var foo = function(){ 
    // code
}; 
function bar(){ 
    // code
};
这也是变量提升的问题,看下面的例子:
console.log(foo);
console.log(bar);
var foo = function(){ 
    //  code
}; 
function bar(){ 
    //  code
};
输出:
undefined
function bar(){ 
    // code
};
为什么 foo 打印出来是 undefined,而 bar打印出来却是函数?JavaScript在执行时,会将变量提升。
相当于下面的代码:
// foo bar的定义位置被提升
function bar(){ 
    // code
}; 

var foo;
console.log(foo);
console.log(bar);
foo = function(){ 
    //  code
};
5.下面代码输出什么?
var foo = function bar(){ 
  return 12; 
};
typeof bar();
输出是抛出异常,bar is not defined。 这和作用域有关系。
如果想让代码正常运行,需要这样修改代码:
var bar = function(){ 
return 12; 
};
typeof bar();
或者
function bar(){ 
return 12; 
};
typeof bar();
详细说明:
var foo = function bar(){ 
    // foo is visible here 
    // bar is visible here
  console.log(typeof bar()); // Work here 
};
// foo is visible here
// bar is undefined here
6.下面代码输出什么?
var z = 1,
y = z = typeof y;
console.log(y);
输出 undefined。
js中赋值操作结合律是右至左的 ,即从最右边开始计算值赋值给左边的变量。
上面的代码相当于:
var z = 1;
z = typeof y;
var y = z;
console.log(y);

7.下面代码输出什么?
var bar = true;console.log(bar + 0);   
console.log(bar + "xyz");  
console.log(bar + true);  
console.log(bar + false);
结果:
1
truexyz
2
1
加法操作表:
  • Number + Number -> 加法

  • Boolean + Number -> 加法

  • Boolean + Boolean -> 加法

  • Number + String -> 连接

  • String + Boolean -> 连接

  • String + String -> 连接

    js常用的一些面试题。

 


8.下面代码输出什么?
var trees = ["xyz","xxxx","test","ryan","apple"];
delete trees[3];  
console.log(trees.length);
结果: 5  因为delete操作符并不是影响数组的长度。

 9.怎么判断一个object是否是数组(array)?

@1  使用 Object.prototype.toString 来判断是否是数组

 

function isArray(obj){    
  return Object.prototype.toString.call( obj ) === '[object Array]';
}

 

  这里使用call来使 toString 中 this 指向 obj。进而完成判断

@2  使用 原型链 来完成判断

function isArray(obj){   
   return obj.__proto__ === Array.prototype;
}

  基本思想是利用 实例如果是某个构造函数构造出来的那么 它的 __proto__是指向构造函数的 prototype属性。

@3  利用JQuery

function isArray(obj){    
  return $.isArray(obj)
}

 JQuery isArray 的实现其实就是@1

10.JavaScript怎么清空数组?

var arrayList = ['a','b','c','d','e','f'];

@1

arrayList = [];

直接改变arrayList所指向的对象,原对象并不改变。

@2

arrayList.length = 0;

这种方法通过设置length=0 使原数组清除元素。

11.写一个mul函数,使用方法如下。

console.log(mul(2)(3)(4)); // output : 24 
console.log(mul(4)(3)(4)); // output : 48
答:
function mul (x) {    
  return function (y) { 
        return function (z) { 
            return x * y * z; 
        };
    };
};
说明: mul 返回一个匿名函数,运行这个匿名函数又返回一个匿名函数,最里面的匿名函数可以访问 x,y,z 进而算出乘积返回即可。

 

对于JavaScript中的函数一般可以考察如下知识点:

  • 函数是一等公民

  • 函数可以有属性,并且能连接到它的构造方法

  • 函数可以像一个变量一样存在内存中

  • 函数可以当做参数传给其他函数

  • 函数可以返回其他函数