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

相关文章

来自专栏增长技术

swift体验1

一门新语言传统的入门方式是在屏幕上打印“Hello,wrold”。在Swift中你可以用下面一行 代码:

724
来自专栏服务端思维

Kotlin的语法糖(一)基础篇

Java 提供了八种基本类型:byte、short、int、long、float、double、boolean、char。对比下 Kotlin,它的数据类型分为...

762
来自专栏数据之美

浅谈 Scala 中下划线的用途

Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之外,还有语法层面的,比如 underscore(下划线)就会...

18010
来自专栏java一日一条

如何用Map对象创建Set对象

Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。

531
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(新排版)

VSCode设置python3的开发环境(linux下默认是python2)https://www.cnblogs.com/dotnetcrazy/p/9095...

842
来自专栏一个会写诗的程序员的博客

写了多年的Java,直到看到Kotlin,原来代码可以如此优雅!

如果你是像我一样是一名 优秀 的Java开发者 _ ,而且已经想用kotlin来实现你的程序,那么,抱歉!不要用Java的语法思维来写Kotlin,不要让kot...

1544
来自专栏我是攻城师

你不知道的Java的split的小问题

2706
来自专栏一个会写诗的程序员的博客

第5章 函数与函数式编程第5章 函数与函数式编程

函数式编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以传入函数参数,也可以返回一个函数。函数式编程 (简称FP) 是一种编程...

511
来自专栏cs

c++15.0 RTTI机制, 类型转换操作, 表达式类型推断与获取

---- c++的语法,我准备要结束了,c++东西还有很多,比如多线程,c11新特性等,我不是很熟,以后有时间在补充吧。准备写c#了,原本准备开始java语法的...

3608
来自专栏静晴轩

类数组借用数组方法

于JavaScript如何将对象转化为数组对象,其用法写法已经很常见且完善,比如JQuery中的makeArray函数对此的实现,也是跟大家想的差不多,只是考虑...

2809

扫码关注云+社区