JavaScript面试题(指针、帽子和女朋友)


Posted in Javascript onNovember 23, 2016

首先,事情开始于一道面试题

<script>
function A(){
this.name="";
this.age=18;
}
var a1=new A();
a1.name="尼古拉斯·??;
var a2=a1;
a2.name="blue";
console.log(a1.name); //变成blue了
var str1="尼古拉斯·??;
var str2=str1;
str2="blue";
console.log(str1); //没变,还是尼古拉斯·?
</script>
简单来说
a2=a1;
a2.name=xxx; //a1.name会变
str2=str1;
str2=xxx; //str1不会变

欢迎觉得废话太多的同学直接翻到最后看“技术流解释”哈,那么我们开始

套用一句比较俗的话:“道理我都懂,可是为什么字符串就不会变呢”,JavaScript作为高级语言并没有指针的概念,但却又总被这事儿困扰,今天我就想试试让大家理解这个概念,如果要弄明白这个事情,请先来弄明白一个特别简单的事情:

假设你有女朋友叫梦琪,喜欢带黄色帽子,你帮她买了顶红色帽子,请问:梦琪带什么颜色的帽?

答:红色

假设你有女朋友叫梦琪,喜欢带黄色帽子,你直接换了个喜欢带红色帽子的女朋友,请问:梦琪带什么颜色的帽子?

答:还是黄色,没变

如果我们理解了上面这个花心萝卜和戴帽子的女朋友的问题,那么问题就变得非常简单,用代码再表示一遍:

//情况1:换帽子
你.女朋友=梦琪;
你.女朋友.帽子=红色;
console.log(梦琪.帽子); //红色
//情况2:换女朋友
你.女朋友=梦琪;
你.女朋友=安易;
console.log(梦琪.帽子); //黄色,没变

简单来说,你换女朋友了,关人家帽子啥事,对吧

为了彻底弄明白问题的步骤1/2:

让我们把这个本就混乱的关系搞得更乱一些吧[捂脸]

假设张三和李四,都找了同一个女朋友,张三给她买了一顶帽子,请问:李四的女朋友换帽子了没?

答:换了

假设张三和李四,都找了同一个女朋友,张三扛不住了,又新找了个女朋友,请问:这跟李四女朋友的帽子有关系吗?

答:有毛关系啊

上面这个混乱的关系,用程序表述出来就是:

//情况1.换帽子
张三女朋友=李四女朋友; //传说中的引用:第一次见到能把出轨说的这么清新脱俗的
张三女朋友.帽子=绿色的帽子;
console.log(李四女朋友.帽子); //变了,绿的
//情况2.跟帽子有毛关系
张三女朋友=李四女朋友;
张三女朋友=新的女朋友;
console.log(李四女朋友.帽子); //不知道什么颜色,反正没变

为了彻底弄明白问题的步骤2/2:

直接上代码了,解释见注释哈

//情况1:帽子
var 张三女朋友=new 女朋友(); //太方便了有没有
var 李四女朋友=张三女朋友; //又引用了
张三女朋友.帽子=红的;
console.log(李四女朋友.帽子); //红的,变了
//情况2:跟帽子有毛关系
var 张三女朋友=new 女朋友();
var 李四女朋友=张三女朋友;
张三女朋友=另一个;
console.log(李四女朋友.帽子); //没变,跟帽子有毛关系

所以,现在请跟随我再来重新看一遍上面的问题

//情况1
var a1=new A();
var a2=a1;
//注意:在这个时候,a1和a2就是同一个东西,引用嘛,你懂的
a2.name="blue"; //你给女朋友,买了顶新的帽子
console.log(a1.name); //她的帽子是Blue色的
//情况2
var str1="aaa";
var str2=str1;
//注意:这个时候,str1和str2也是同一个东西,也是引用
str2="blue"; //你直接换了个女朋友
console.log(str1); //你原先女朋友没啥变化

人上了年纪就会很??拢?苯由贤级嗪茫?/p>

情况1:a2.name="blue"

JavaScript面试题(指针、帽子和女朋友)

情况2:str2="blue"

JavaScript面试题(指针、帽子和女朋友)

==========================纯技术流分隔线==========================

1.指针:代表一个变量或属性指向谁

2.赋值:代表改变变量或属性的指向

合起来用:

a1=a2;
a2.name='blue';
//改变a2.name指向了'blue';但a1和a2依然指向同一个对象,所以:a1.name=>'blue'
str1=str2;
str2='blue';
//改变str2指向了'blue';这时str1和str2不再指向同一对象,所以:str1不变

以上所述是小编给大家介绍的JavaScript面试题(指针、帽子和女朋友),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用 Javascript 验证表单(form)中的单选(radio)值
Sep 08 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
Jquery封装tab自动切换效果的具体实现
Jul 13 Javascript
jquery文档操作wrap()方法实例简述
Jan 10 Javascript
jQuery晃动层特效实现方法
Mar 09 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
Sep 18 Javascript
js中setTimeout的妙用--防止循环超时
Mar 06 Javascript
Vue header组件开发详解
Jan 26 Javascript
vue动态路由配置及路由传参的方式
May 23 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 #Javascript
移动开发之自适应手机屏幕宽度
Nov 23 #Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 #Javascript
jQuery-mobile事件监听与用法详解
Nov 23 #Javascript
jquery-mobile表单的创建方法详解
Nov 23 #Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 #Javascript
浅析Node.js:DNS模块的使用
Nov 23 #Javascript
You might like
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
Python functools模块学习总结
2015/05/09 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python实现复制大量文件功能
2019/08/31 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
python实现斗地主分牌洗牌
2020/06/22 Python
python从PDF中提取数据的示例
2020/10/30 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
运动会通讯稿200字
2014/02/16 职场文书
保研推荐信格式
2015/03/25 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
Python 统计序列中元素的出现频度
2022/04/26 Python