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 条评论
登录 后参与评论

相关文章

来自专栏码云1024

JAVA 第二天 内部类

26111
来自专栏Java技术栈

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

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

874
来自专栏Java架构师历程

精选30道Java笔试题解答

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

1954
来自专栏Ryan Miao

String的内存模型,为什么String被设计成不可变的

String是Java中最常用的类,是不可变的(Immutable), 那么String是如何实现Immutable呢,String为什么要设计成不可变呢? 前...

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

Swift3.0 - 流控制

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

662
来自专栏精讲JAVA

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

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

631
来自专栏NewbieWeb

Java开发规范

PS:上述列表只是举个例子并未完全列出所有可能的情况,其他情况大家可以以此类推;而且自定义类型的局部变量名称可以不采用上述规则。

1082
来自专栏java思维导图

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

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

593
来自专栏编程

Python读书笔记5

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

1797
来自专栏架构之路

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

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

3884

扫码关注云+社区