JavaScript常见面试题五
好程序员Java教程分享JavaScript常见面试题五
1、以下代码行将输出什么到控制台?
console.log("0||1="+(0||1));console.log("1||2="+(1||2));console.log("0&&1="+(0&&1));console.log("1&&2="+(1&&2));
并解释。
该代码将输出:
0||1=11||2=10&&1=01&&2=2
在JavaScript中,||和&&都是逻辑运算符,用于在从左至右计算时,返回第一个可完全确定的“逻辑值”。
或(||)运算符。在形如X||Y的表达式中,首先计算X并将其解释执行为一个布尔值。如果这个布尔值true,那么返回true(1),不再计算Y,因为“或”的条件已经满足。如果这个布尔值为false,那么我们仍然不能知道X||Y是真是假,直到我们计算Y,并且也把它解释执行为一个布尔值。
因此,0||1的计算结果为true(1),同理计算1||2。
与(&&)运算符。在形如X&&Y的表达式中,首先计算X并将其解释执行为一个布尔值。如果这个布尔值为false,那么返回false(0),不再计算Y,因为“与”的条件已经失败。如果这个布尔值为true,但是,我们仍然不知道X&&Y是真是假,直到我们去计算Y,并且也把它解释执行为一个布尔值。
不过,关于&&运算符有趣的地方在于,当一个表达式计算为“true”的时候,那么就返回表达式本身。这很好,虽然它在逻辑表达式方面计算为“真”,但如果你希望的话也可用于返回该值。这就解释了为什么,有些令人奇怪的是,1&&2返回2(而不是你以为的可能返回true或1)。
2、执行下面的代码时将输出什么?请解释。
console.log(false=='0')console.log(false==='0')
代码将输出:
truefalse
在JavaScript中,有两种等式运算符。三个等于运算符===的作用类似传统的等于运算符:如果两侧的表达式有着相同的类型和相同的值,那么计算结果为true。而双等于运算符,会只强制比较它们的值。因此,总体上而言,使用===而不是==的做法更好。!==vs!=亦是同理。
3、以下代码将输出什么?并解释你的答案。
vara={},
b={key:'b'},c={key:'c'};
a=123;
a[c]=456;
console.log(a);
这段代码将输出456(而不是123)。
原因为:当设置对象属性时,JavaScript会暗中字符串化参数值。在这种情况下,由于b和c都是对象,因此它们都将被转换为"[objectObject]"。结果就是,a和a[c]均相当于a["[objectObject]"],并可以互换使用。因此,设置或引用a[c]和设置或引用a完全相同。
4、以下代码行将输出什么到控制台?
console.log((functionf(n){return((n>1)?n*f(n-1):n)})(10));
并解释你的答案。
代码将输出10!的值(即10!或3628800)。
原因是:
命名函数f()递归地调用本身,当调用f(1)的时候,只简单地返回1。下面就是它的调用过程:
f(1):returnsn,whichis1f(2):returns2f(1),whichis2f(3):returns3f(2),whichis6f(4):returns4f(3),whichis24f(5):returns5f(4),whichis120f(6):returns6f(5),whichis720f(7):returns7f(6),whichis5040f(8):returns8f(7),whichis40320f(9):returns9f(8),whichis362880f(10):returns10*f(9),whichis3628800
5、请看下面的代码段。控制台将输出什么,为什么?
(function(x){return(function(y){console.log(x);
})(2)
})(1);
控制台将输出1,即使从来没有在函数内部设置过x的值。原因是:
闭包是一个函数,连同在闭包创建的时候,其范围内的所有变量或函数一起。在JavaScript中,闭包是作为一个“内部函数”实施的:即,另一个函数主体内定义的函数。闭包的一个重要特征是,内部函数仍然有权访问外部函数的变量。
因此,在本例中,由于x未在函数内部中定义,因此在外部函数范围中搜索定义的变量x,且被发现具有1的值。
6、下面的代码将输出什么到控制台,为什么:
varhero={
_name:'JohnDoe',
getSecretIdentity:function(){returnthis._name;
}
};varstoleSecretIdentity=hero.getSecretIdentity;console.log(stoleSecretIdentity());console.log(hero.getSecretIdentity());
代码有什么问题,以及应该如何修复。
代码将输出:
undefinedJohnDoe
第一个console.log之所以输出undefined,是因为我们正在从hero对象提取方法,所以调用了全局上下文中(即窗口对象)的stoleSecretIdentity(),而在此全局上下文中,_name属性不存在。
其中一种修复stoleSecretIdentity()函数的方法如下:
varstoleSecretIdentity=hero.getSecretIdentity.bind(hero);
7、创建一个给定页面上的一个DOM元素,就会去访问元素本身及其所有子元素(不只是它的直接子元素)的函数。对于每个被访问的元素,函数应该传递元素到提供的回调函数。
此函数的参数为:
DOM元素
回调函数(将DOM元素作为其参数)
访问树(DOM)的所有元素是经典的深度优先搜索算法应用。下面是一个示范的解决方案:
functionTraverse(p_element,p_callback){
p_callback(p_element);varlist=p_element.children;for(vari=0;i
Traverse(list,p_callback);//recursivecall
}
}
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ThingJS平台上有哪些组件和工具?
ThingJS 基于 HTML5 和 WebGL 技术,可方便地在主流浏览器上进行浏览和调试,支持 PC 和移动设备。ThingJS 为可视化应用提供了简单、丰富的功能,只需要具有基本的 Javascript 开发经验即可上手。 ThingJS 提供了场景加载、分层级浏览,对象访问、搜索、以及对象的多种控制方式和丰富的效果展示,可以通过绑定事件进行各种交互操作,还提供了摄像机视角控制、点线面效果、温湿度云图、界面数据展示、粒子效果等各种可视化功能。 ThingJS提供如下相关组件和工具供用户使用: CityBuilder:聚焦城市的 3D 地图搭建工具,打造你的 3D 城市地图。 CamBuilder:简单、好用、免费的 3D 场景搭建工具。 ThingPano:全景图制作工具,轻松制作并开发全景图应用,实现 3D 宏观场景和全景微观场景的无缝融合。 ThingDepot:上万种模型,数十个行业,自主挑选,一次制作多次复用。 CamBuilder 当前版本: v1.2.1.128 背景 CamBuilder是ThingJS平台提供的园区级3D场景搭建工具。CamBuilder既可在联网...
- 下一篇
Java之Hibernate常见面试题
Java之Hibernate常见面试题 1、hibernate的inverse属性的作用? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1filed1,type2field2),然后在hql里面就可以直接生成这个bean了。 2、spring+Hibernate中委托方案怎么配置? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1filed1,type2field2),然后在hql里面就可以直接生成这个bean了。 3、hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路