JavaScript Allongé 序幕:值和表达式
42
42
//=> 42
"JavaScript" + " " + "Allonge"
//=> "JavaScript Allonge"
2 === 2
//=> true
'hello' !== 'goodbye'
//=> true
2 === '2'
//=> false true !== 'true'
//=> true
true === false
//=> false 2 !== 5
//=> true 'two' === 'five'
//=> false
值类型
第三,有时,一些杯子的类型没有区分标志,如果它们是同种类型的杯子,其"容量"也相同,我们没有办法分辨它们之间的不同点,这是我们到目前为止所看到的字符串、数值和布尔值的情况。
2 + 2 === 4
//=> true (2 + 2 === 4) === (2 !== 5)
//=> true
注意这些例子中发生的事情:当我们获得一个作为表达式结果的字符串、数值和布尔值时,它与另一个相同类型相同内容的值是相同的,字符串、数值和布尔值是javascript中所谓的“值”或“原始值”的例子。
我们将交替使用这两个术语。
我们还没有遇到第四种可能性,稍微拉伸一下这个比喻,某些类型的杯子底部有一个序列号,所以即便你有两只同种类型相同容量的杯子,你还是能区分它们。
引用类型
所以在javascript中哪种类型的值会是相同类型且相同内容时,但不被认为在相同的呢?我们来看一种在现代编程语言中非常常见的数据结构——数组(其他语言中有时称其为列表或向量)。
数组看起来像这样:[1, 2, 3],这是一个表达式,你可以用"[]"与其他表达式结合起来,诸如:
[2-1, 2, 2+1]
[1, 1+1, 1+1+1]
注意:你总是生成相同内容的数组,但是数组的每一个值与另一个数组的每一个值都相同,他们就同样恒等么?自己试试这些:
[2-1, 2, 2+1] === [1,2,3]
[1,2,3] === [1, 2, 3]
[1, 2, 3] === [1, 2, 3]
怎么样?当你输入[1,2,3]或其任何变体,你正在输入一个不同于其他任何数组的生成了其自身唯一的数组的表达式。即便其他的数组看起来也像[1,2,3],就好像javascript生成两个底部有不同序列号的咖啡杯一样。
数组看起来非常简单,然而“引用”这个词充满了太多的可能性,有一整个章节专门讨论重新绑定与引用。试着输入这个代码:
var ouroboros = [];
ouroboros[0] = ouroboros;
//=> [ [Circular] ]
你正在创建一个ouroborian数组,一个包含本身的数组。
它们看似相同,但如果你用“===”检测,你看到它们是不同的。每次你计算一个表达式(包括输入一些东西)来创建一个数组,你在创建一个新的、不同的值,即便它看起来与某些其他数组的值相同。正如我们所见,许多其他类型的值是如此的,包括函数,这本书的主题。
JavaScript Allongé 序幕:值和表达式的更多相关文章
- 第三章:Javascript类型、值和变量。
计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特 ...
- 前端要给力之:语句在JavaScript中的值
文件夹 文件夹 问题是语句有值吗 那么说你骗我咯 有啥米用呢 研究这个是不是闲得那个啥疼 ES5ES6有什么差异呢 结论是ES6是改了规则但更合理 最后不不过if语句 这两天在写语言精髓那本书的第三版 ...
- JavaScript Allongé 第一呷 :基础函数 (2)
啊!我想要有一个参数 到现在为止,我们已经了解了没有参数的函数.只说我们的函数没有任何参数,甚至还没说参数是什么.大多数程序员非常熟悉参数,中学数学就讨论这个了.所以你知道他们是什么,而我也知道你知道 ...
- JavaScript的基础数据类型和表达式
Java Script的基础数据类型和表达式 基本的数据类型: number(数值)类型:可分为整数和浮点数 string(字符)类型:是用单引号“'”或者双引号“"”来说明的. boole ...
- javascript立即调用的函数表达式N种写法(第二篇)
原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...
- JavaScript获取当前值
JavaScript获取当前值 1.说明 获取select下拉框中的选中的值以及文本值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- Javascript获取value值的三种方法及注意点
JavaScript获取value值,主要有以下三种: 1.用document.getElementById(“id名”).value来获取(例1): 2.通过form表单中的id名或者name名来获 ...
- TOJ1302: 简单计算器 && TOJ 4873: 表达式求值&&TOJ3231: 表达式求值
这些都是应用Python的eval函数的一些题目! TOJ1302传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=show ...
- asp.net后台操作javascript:confirm返回值
在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...
随机推荐
- 用 Java 抓取优酷、土豆等视频
1. [代码][JavaScript]代码 import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes ...
- LoadRunner添加检查点
见过磕长头的人吗?他们的脸和手都很脏,可是心灵却很干净. ——<可可西里> 1.选择需要设置检查点的内容 有如下“添加客户”功能,添加任务操作完成之后,我希望检查是否添加成功.从图中可以看 ...
- SVN与CVS比较-怎度网
SVN与CVS比较 所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了.不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了.更有甚者,它甚至让人重回VSS.CVS ...
- Android Dalvik虚拟机
虽然Android平台使用Java来开发应用程序,但Android程序却不是运行在标准Java虚拟机上的. 可能是出于效率和版权的考虑,Google为Android专门设计了一套虚拟机Dalvik V ...
- luogu 3812 【模板】 线性基
线性基是一个支持在集合里插入数并查询最大子集异或值 #include<iostream> #include<cstdio> #include<cstring> #i ...
- 蓝桥杯G将军
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死 ...
- HttpClient入门教程
HttpClient使用详解与实战一:https://www.jianshu.com/p/375be5929bed
- web单机优化
又得开始写博客了,目测又要一周一篇了,当然了这不算python跟前端的,个人喜欢notepad++可惜不能放图片,word什么的太讨厌了 为什么要单机优化呢,很简单,因为不论以后是各类集群也好,物理机 ...
- PICO 中关于时基ps3000aGetTimebase函数介绍
- rpm 命令|rpm 安装|rpm 卸载|rpm 使用|rpm 删除
在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM) ...