不可变的原始值和可变的对象引用
2015-12-05 16:27
267 查看
javascript的原始值(undefined、null、布尔值、数字和字符串)与对象(包括数组和函数)有着根本区别。原始值是不可更改的:任何方法都无法更改(或“突变”)一个原始值。对数字和布尔值来说显然如此—改变数字的值本身就说不通,而对字符串来说就不那么明显了,因为字符串看起来像由字符组成的数组,我们期望可以通过指定索引来修改字符串中的字符。实际上,javascript是禁止这样做的。字符串中所有的方法看上去返回一个修改后的字符串,实际上返回的是一个新的字符串。
原始值得比较是值得比较:只有在它们的值相等时它们才相等。这对数字、布尔值、null和undefined来说听起来有点难懂,并没有其他方法比较它们。同样,对于字符串来说则并不明显:如果比较两个单独的字符串,当且仅当它们长度相等且每个索引的字符都相等时,javascript才认为他们相等。
对象和原始值不同,首先,他们是可变的—它们的值可修改的。对象的比较并非值得比较:即两个对象包含同样的属性及相同的值,它们也是不想等的。各个索引元素完全相等的两个数组也不想等。
我们通常将对象成为引用类型,以此来和javascript的基本类型区分开来,对象值都是引用,对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。将对象(或数组)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次。如果想得到一个对象或数组的副本,则必须显式复制对象的每个属性或数组的每个元素。
原始值得比较是值得比较:只有在它们的值相等时它们才相等。这对数字、布尔值、null和undefined来说听起来有点难懂,并没有其他方法比较它们。同样,对于字符串来说则并不明显:如果比较两个单独的字符串,当且仅当它们长度相等且每个索引的字符都相等时,javascript才认为他们相等。
对象和原始值不同,首先,他们是可变的—它们的值可修改的。对象的比较并非值得比较:即两个对象包含同样的属性及相同的值,它们也是不想等的。各个索引元素完全相等的两个数组也不想等。
我们通常将对象成为引用类型,以此来和javascript的基本类型区分开来,对象值都是引用,对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。将对象(或数组)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次。如果想得到一个对象或数组的副本,则必须显式复制对象的每个属性或数组的每个元素。
相关文章推荐
- Ugly Number
- Stanford机器学习---第四讲. 神经网络的表示 Neural Networks representation
- 深入分析JavaWeb Item9 -- HttpServletRequset详解
- Python爬虫入门四之Urllib库的高级用法
- MFC工具栏的使用
- 系统基础优化
- Fresco 多图加载之ResizeOptions
- Java的Spring框架中bean的继承与内部bean的注入
- 模板元编程第六章课后习题(非答案)20151206
- Code Forces 590 A. Median Smoothing(机智)
- 数据库零散知识点
- Apache Lucene 5.x 集成中文分词库 IKAnalyzer
- BZOJ1052: [HAOI2007]覆盖问题
- iOS中的数据库 sqlite与coreData 的一些特点
- Cocos2d-Js使用JavaScript的优点
- centos下问题:connect:network is unreachable
- 修改了一下 感觉比上一次好
- 《疯狂JAVA讲义》——Singleton类
- 数据库,求属性集闭包和函数依赖集闭包的算法实现
- 类和对象(代码)