业界动态
JavaScript基本的面试题及答案
2024-11-26 07:37

1、使用typeof bar==="object"来确定bar是否是对象的潜在陷阱是什么?如何避免这个陷阱?

Javas<em></em>cript基本的面试题及答案

例:

var bar=null;

console.log(typeof bar==="object");

输出结果:true;

解释:在javascript中null被认为是对象

如果要避免该陷阱,则还需要判断bar是否为null。

例:

var bar=null;

console.log((bar!==null)&&(typeof bar==="object"));

输出结果:false

2、下面的代码在控制台输出什么结果,为什么?

 解释:

var a=b=3的声明是b=3,var a=b的简写,b是全局变量(因为它没有前缀var关键字),因此它的作用域为匿名函数之内和匿名函数之外;而a的定义为局部变量,因此它的作用域只在匿名函数之内,而输出结果语句是在闭包之外,因此typeof a!=='undefined'的输出结果为true,在匿名函数之内的输出结构则为false.

注:1、这个题的关键在var a=b=3这句话的理解

       2、在严格模式下(即使用use strict),语句var a=b=3将生成ReferenceError:b is not defined的运行时错误,从而避免任何否则可能导致的headfakes/bug.

3、下面的代码将输出什么到控制台,为什么?

 

解释:在外部函数中,this和self都指向的是myObject对象,所以输出结果都指向的是bar;在内部函数中,this指向的是其匿名函数,而匿名函数中并没有定义foo,因此输出结果为undefined,而self变量相对于内部函数而言是全局变量,其所指向的是myObject对象,因此其输出结果为:bar.

注:该题的关键点在于对this的理解,但是this在Javascript中又是一个很难理解的东西,通过学习和别人的总计,大致对this在不同的环境中的意义做了总结,大致如下:

    1、在HTML标签中(例:<button onclick="calc(this)">提交</button>),this指代当前触发事件元素对象本身;

    2、所有匿名函数的回调或者自调,内部的this指向的是window;

    3、在程序运行时,this指代正在调用方法的对象(.之前的对象);

4、在Javascript源文件的开头包含use strict有什么意义和好处?

    答:use strict是一种在Javascript代码运行时自动实行更严格解析和错误处理的方法,那些被忽略或默默失败了的代码错误,会产生错误或抛出异常。通常而言,这是一个很好的做法。

    严格模式的主要优点包括:

        1、使调试更加容易。那些被忽略或默默失败了的代码错误,会产生错误或抛出异常,因此今早提醒你代码中的问题,你才能更快的指引到它们的源代码

        2、防止意外的全局变量。如果没有严格模式,将值分配给一个未声明的变量会自动创建该名称的全局变量。这是Javascript中最常见的错误之一。在严格模式下,这样做的话会抛出错误。

        3、消除this强制。如果没有严格模式,引用null或未定义的值到this值会自动强制到全局变量。这可能会导致许多令人头痛的问题和让人恨不得拔自己头发的bug。在严格模式下,引用null或未定义的this值会抛出错误。

        4、不允许重复的属性名称或者参数值。当检测到对象(例如:var object={foo:“bar”,foo:"baz"})中重复命名的属性,或检测到函数中(例如:function foo(var1,var2,var1){})重复命名的参数时,严格模式会抛出错误,因此捕捉几乎可以肯定是代码中的bug可以避免浪费大量的跟踪时间。

        5、使用eval()更安全。在严格模式和非严格模式下,eval()的行为方式有所不同。最显而易见的是,在严格模式下,变量和声明在eval()语句内部的函数不会再包含范围内创建(它们会在严格模式下的包含范围中被创建,这也是一个常见的问题源。)

        6、在delete使用无效时抛出错误。delete操作符(用于从对象中删除属性)不能用再对象不可配置的属性上。当试图删除一个不可配置的属性时。非严格代码将默默地失败,而严格模式将在这样的情况下抛出异常。

5、考虑以下两个函数,它们会返回相同的东西吗?为什么相同或为什么不同?

解释:

分号在Javascript中是一个可选项(尽管省略它们通常是非常糟糕的形式)。其结果就是,当碰到foo2()中包含return语句的代码行(代码行上没有任何其它代码),分号会立即自动插入到返回语句之后。也不会抛出错误,因为代码的其余部分是完全有效的,即使它没有得到调用或做任何事情(相当于它就是一个未使用的代码块,定义了等同于字符串“hello”的属性bar)。这种行为也支持放置左括号于Javascript代码行的末尾,而不是新代码行开头的约定。正如这里所示,这不仅仅是Javascript中的一个风格偏好。

6、NaN是什么?它的类型是什么?你如何可靠的测试一个值是否等于NaN?

答:NaN属性代表一个“不是数字”的值。这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字(例如:“abc”/3),要么是因为运算结果为非数字(例如:除数为0)。虽然这看上去很简单,但NaN有一些令人惊讶的特点,如果你不知道它的话,可能会导致令人头痛的bug。

    首先,NaN和任何东西做全等比较,包括它自身,结果返回的都为false,一种可靠的办法来测试一个数字是否是NaN,是使用函数isNaN(),但即使使用isNaN()依然并非是一个完美的解决方案。一个更好的解决办法是使用value!=value,如果值等于NaN,只会产生true。另外,ES6提供了一个新的Number.isNaN()函数,这是一个不同的函数,并且比老的全局isNaN()函数更可靠。

7、下列代码输出什么?为什么?

Javascript中的数字和浮点精度的处理相同,因此可能不会总产生预期的结果。

8、判断值x是否为整数的方法?

答:1、在ECMAscript6中使用number.isInteger()方法判断,如果是整数,则返回true,如果不是,则返回false.

       注: 和正负 不是整数

        例:number.isInteger(25)//true;

               number.isInteger(25.0)//true;

               number.isInteger(25.1)//false;

               number.isInteger("25")//false;

               number.isInteger(true)//false;

        2、function isInteger(x){return (x^0)===x;}

        3、function isInteger(x){return Math.round(x)===x};

         注:Math.ceil()和Math.floor()等同于Math.round()

        4、function isInteger(x){return (typeof x==="number")&&(x%1===0)}

        错误方法:function isInteger(x){return parseInt(x,10)===x;}

        解释:因为当x的取值足够大时,这个方法就会出错,因为当X值足够大时,它的字符串就会表达为指数形式,例如:1e+21,当使用parseInt()去判断时,输出的结果为1.

9、下列代码的输出结果是什么?为什么?

解释:1和4之所以放到前面,是因为他们通过简单调用console.log()而没有任何延迟输出的

           2之所以放在3的后面,是因为2是延迟了1000毫秒(即1秒)之后输出的,而3是延迟了0毫秒之后输出的。

    以上就是本篇文章【JavaScript基本的面试题及答案】的全部内容了,欢迎阅览 ! 文章地址:http://lanlanwork.gawce.com/news/10285.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 阁恬下移动站 http://lanlanwork.gawce.com/mobile/ , 查看更多   
最新新闻
vivo S19从2699元跌至1669元,配置6000mAh+80W+骁龙7Gen3vivo手机价格表「vivo S19从2699元跌至1669元,配置6000mAh+80W+骁龙7Gen3」
如果说过去提起vivo,有些网友的第一反应是高价低配,那么现在我们可以大声告诉他们:时代变了!特别是vivo推出的这款vivo S19,
荣耀60pro和50pro区别哪个好 参数配置不同点对比评测手机对比参数配置「荣耀60pro和50pro区别哪个好 参数配置不同点对比评测」
  今天小编为大家带来荣耀60pro和荣耀50pro的对比这两款手机可以为用户提供很好的手机性能体验,同时为用户提供相似的手机外形
安卓数据备份官方版 v2.0.3安卓手机备份「安卓数据备份官方版 v2.0.3」
安卓数据备份app是一款专为安卓手机用户打造的手机数据备份软件,这款软件的兼容性非常的强大,能够完美的兼容多种安卓手机机型,有
第十二章 今晚你就睡这里吧神奇手机「第十二章 今晚你就睡这里吧」
  从卫生间里出来的夏雅头发还有些湿润,被热气蒸腾得红扑扑的脸蛋也不再像白天那么憔悴了,透出了一股青春活力的气息。  她
开一家拼多多驿站,我在老家过上“向往的生活”
早上8点,来自广西的宁西川打开驿站大门,用打扫卫生开启新的一天。晚些时候,他将用入库、出库和送货填满一天的生活。早些年,
仿招商银行loading招商银行手机app「仿招商银行loading」
int anim abc_fade_in 0x7f050000int anim abc_fade_out 0x7f050001int anim abc_grow_fade_in_from_bottom 0x7f
湖南桂东:云间玲珑香 引领生态富民之路
云间一盏茶,万亩清风来。桂东县清泉镇,由湖南省郴州市总工会、郴州市农业农村局与桂东县人民政府联合打造的“郴州市手工制茶技
去年投资总收益近8000亿元,解码五大险企2025年投资新动向
本报(chinatimes.net.cn)记者胡金华 上海报道2024年上市险企年报披露完毕,受资本市场提振,A股五大保险——、、、、均交出了
足球——足协杯:兰州陇原竞技不敌辽宁铁人农商银行
当日,在甘肃兰州举行的2025中国足球协会杯第二轮比赛中,兰州陇原竞技队主场0比2不敌辽宁铁人农商银行队,无缘下一轮。4月18日
测距仪测量大师手机测量仪「测距仪测量大师」
测距仪-尺子测量大师,一款集合多个实用工具的智能APP,方便您在需要的时候便捷地来使用。不再需要使用多个APP,而只需一款集成