js常用的一些面试题。
来源:互联网 发布:苹果手机电池修复软件 编辑:程序博客网 时间:2024/04/18 12:19
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};输出:
undefinedfunction 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);结果:
1truexyz21加法操作表:
Number + Number -> 加法
Boolean + Number -> 加法
Boolean + Boolean -> 加法
Number + String -> 连接
String + Boolean -> 连接
String + String -> 连接
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中的函数一般可以考察如下知识点:
函数是一等公民
函数可以有属性,并且能连接到它的构造方法
函数可以像一个变量一样存在内存中
函数可以当做参数传给其他函数
函数可以返回其他函数
阅读全文
0 0
- js常用的一些面试题。
- Html和JS的一些面试题
- js+node.js方面的一些面试题
- 分享】一些常用的java面试题及答案
- JS的一些面试题(自己试答案)
- JS打印一些数字 面试题
- 一些C#的面试题
- java的一些面试题
- C#的一些面试题
- C#的一些面试题
- Dotnet的一些面试题
- 搜集的一些面试题
- 一些面试题的解答
- 一些微软的面试题
- oracle 的一些面试题
- 一些Unity3D的面试题
- hibernate的一些面试题
- PHP的一些面试题
- 抽象工厂(例子)
- JS的form表单提交
- Ubuntu 16.04 安装petalinux2017.1
- C++基础学习笔记:自定义数组模板类
- 【ProgrammingMicrosoftAzureServiceFabric】第四章: Actor模式
- js常用的一些面试题。
- Java面向对象(三)Static
- Java标识符和关键字
- leetcode 119. Pascal's Triangle II 杨辉三角形2
- CSS3过渡
- Android开发:最全面、最易懂的Webview使用详解
- IE格式化日期显示NaN的问题
- 深入理解计算机系统(2.1)------信息的存储和表示
- chart.js参数问题