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来完成. ( ...
随机推荐
- 基于BASYS2的VHDL程序——分频和数码管静态显示程序
转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...
- Program received signal SIGSEGV, Segmentation fault.
GDB调试的时候出现了: Program received signal SIGSEGV, Segmentation fault.(程序收到信号SIGSEGV,分段故障) SIGSEGV:在POSIX ...
- Exceprtion:e createQuery is not valid without active transaction; nested exception is org.hibernate.HibernateException: createQuery is not valid without active transaction
如果增加配置了current_session_context_class属性,查询的时候需要session.beginTrasaction()来开启事务
- bzoj 4398 福慧双修——二进制分组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4398 如果枚举1号点走哪些点出去,就从那些点出发跑多源最短路即可.最短路不会重复经过一条边. ...
- PHPstorm相同变量标识
setting-> plugins-> Browse Repositories 输入BrowseWordAtCaret 搜索,安装,然后重启
- char的定义在iOS和Android下是不同的
char is different in iOS and Android!跨平台开发时很容易忽略的非常坑爹的一个区别. 我的需求是实现一个算法,这个算法在iOS和Android下需要保持一致的结果,很 ...
- A - Set of Strings
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description You ar ...
- opencv MatExpr MatOp
opencv提供了很多Mat的操作,其中涉及到两个重要的类:MatOp和MatExpr C++: MatExpr abs(const Mat& m) C++: void absdiff(Inp ...
- vue中循环时动态绑定值
在vue项目中,有很多需要动态循环绑定的场景,在未知绑定数量的情况下只能动态生成绑定值 1.首先在data中定义一个对象,我在项目中时循环绑定下拉框,所以定义了一个selectVal = {} 2.在 ...
- beans.xml中的头部配置
Spring配置文件beans.xml头部配置解释 关于在beans.xml要使用哪些功能,官网上已经提供了每个功能说明和标准的头文件信息,当我们在开发使用时要哪些功能,都可以上官网去定位. http ...