2015.12.02 HTML5真题练习

HTML5学堂:每天一道题,强壮程序员!今日主要涉及昨日题目的解答,以及一道涉及二进制的题目。

HTML5真题【2015.12.01】答案解析

昨日真题题目如下,最终输出的结果是多少?

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂 - H5course</title>
<link rel="stylesheet" href="reset.css">
</head>
<body>
<script>
    console.log([] + [] + "foo".split(""));
</script>
</body>
</html>

本题目的答案是:f,o,o。

答案解析:本题目主要涉及类型转换、数组、字符串。

先来分析一下[] + []结果为多少?是""。明明是两个数组对象相加,为何变成了一个字符串?

一起先来看看下面的例子:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂 - H5course</title>
<link rel="stylesheet" href="reset.css">
</head>
<body>
<script>
    // 重写数组里面toString方法
    Array.prototype.toString = function() {
        return "你调用我了";
    }
    console.log([] + []);
</script>
</body>
</html>

结果:你调用我了你调用我了。为啥不是""?因为我们重写了这样一个方法 —— toString。对于网页解析来说,当 + 操作符操作的是对象时,对象会自动调用自己内部toString方法(toString作为一个对象的自带原型方法而存在),toString方法用于将一个值转换为字符串类型的值。

在[] + []的运算过程中,由于使用到了+号,两个数组对象均调用了自己自带的toString()方法,将[]转换成了字符串,一个空字符串加一个空字符串,自然还是一个空的字符串了。

再来分析一下"foo".split(""),这个的意思是将字符串分割成字符串数组,为["f", "o", "o"]。

最后一步来了,[] + [] + "foo".split("")简化完之后是"" + ["f", "o", "o"],这时候 + 左侧是字符串,右侧是数组对象,数组对象依旧会调用自身的原型方法,将数组转换为字符串。

相关知识的支撑,是我们对一个对象的自带原型方法的了解。这道题如果弄明白了,大概也就能够明白,为何能够使用 + '' 或 * 1进行隐式数据类型的转换了。

HTML5真题【2015.12.02】题目

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5学堂 - H5course</title>
<link rel="stylesheet" href="reset.css">
</head>
<body>
<script>
    console.log(5&3);
</script>
</body>
</html>

关于每日代码练习题的答案和解析,我们会在明日文章当中,发布相关答案以及基本原理。

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2015-12-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老马说编程

(24) 异常 (上) / 计算机程序的思维逻辑

之前我们介绍的基本类型、类、接口、枚举都是在表示和操作数据,操作的过程中可能有很多出错的情况,出错的原因可能是多方面的,有的是不可控的内部原因,比如内存不够了、...

1716
来自专栏Java技术栈

揭开Java 泛型类型擦除神秘面纱

大家可能会有疑问,我为什么叫做泛型是一个守门者。这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇。泛型是 Java 中一个很...

1294
来自专栏黄Java的地盘

正则表达式之进阶篇

本文主要通过介绍正则表达式中的一些进阶内容,让读者了解正则表达式在日常使用中用到的比较少但是又比较重要的一部分内容,从而让大家对正则表达式有一个更加深刻的认识。

1803
来自专栏xingoo, 一个梦想做发明家的程序员

关键字explicit

关键字只能用在类构造函数。它的作用是不能进行隐式转换。 1 class gxgExplicit //没有关键字explicit的类 2 3 { 4 ...

2156
来自专栏编程

Python读书笔记5

上期分享了Python相关的字符串应用,重点分享了转义字符。今天和大家分享和字符串相关的函数和应用。 一、字符串的合并! Python用“+”号可以连接两个文本...

2187
来自专栏java思维导图

揭开Java 泛型类型擦除神秘面纱

大家可能会有疑问,我为什么叫做泛型是一个守门者。这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇。泛型是 Java 中一个很...

893
来自专栏Java架构师历程

精选30道Java笔试题解答

都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来...

3354
来自专栏博岩Java大讲堂

Java泛型的学习和使用

3524
来自专栏每日一篇技术文章

Swift3.0 - 流控制

需求二: 输入一个顶点 判断是否在X轴上,或者Y轴上,或者既不在x轴,也不再Y轴上

792
来自专栏架构之路

JAVA基础知识点:内存、比较和Final

1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题。(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对...

4614

扫码关注云+社区

领取腾讯云代金券