对JavaScript中变量类型的重新理解
《JavaScript启示录》这本书中提出:JavaScript中,对象为“王”(JavaScript里的几乎所有东西都是对象或者用起来像对象)。
飞燕草对JavaScript最深刻的理解--也是这么久以来最有收获的一个认识:JavaScript的值有两种--原始值和对象(原始值的集合)组成。再直接一点,全部都可以理解为对象,原始值虽然不是对象,但是原始值拥有等效包装器对象,按照这么说的话,在JavaScript中真的可以说是对象为“王”。
一:原始值(或简单值)
1.原始值有5种:5(nummber)、"str"(string)、true(boolean)、undefined、null
2.特点:原始值不能够再被细化,即这些值本身就是很简单的,不能表示由其他值组成的值。
3.可以用NUmber()、String()、Boolean()创建原始值,也可以用这些构造函数创建复杂的对象。区别是调用的时候是否使用new关键字
var a=2,b=Number(2),c=new Number(2); console.log(typeof a +" "+typeof b+" "+typeof c);console.log((a===b)+" "+(a===c)+" "+(a==c)); //Number Number Object //true false true
注意:从上面很清楚的可以看出,使用new和不使用new的时候,数据类型是不相同的,并且在严格相等判断的情况下是不相等的
4.第四点也就是让我们相信JavaScript是以对象为“王”的:在针对字符串、数字和布尔值使用字面量值时,只有在该值被视为对象的情况下才会创建实际的复杂对象(这个操作是在幕后自己之执行的,在创建完对象,并且使用完对象之后,自动释放对象)。换句话说,在尝试使用与构造函数有关联的方法或检索属性(如var charactersInFoo="foo".length)之前,一直在使用原始数据类型。当这个情况发生时,JavaScript会在幕后为字面量值创建一个包装器对象,以便将该值视为一个对象。调用方法以后,JavaScript即抛弃包装器对象,该值返回字面量类型。这就是字符串、数字和布尔被认为是原始(或简单)数据类型的原因。 区别“JavaScript中的所有东西都是对象”和“JavaScript中所有东西都用成对象”。
5.简单值比较采用字面量比较
二:复杂值
1.复杂值:原生对象构造函数Object()、Array()、Function()、Date()、Error()、RegExp()是复杂类型,因为他们可以包含一个或者多个原始值或者复杂值
2.复杂对象比较采用引用比较,比较的是引用的地址
对JavaScript中变量类型的重新理解的更多相关文章
- JavaScript 中变量、作用域和内存问题的学习
这是我学习JavaScript的第二篇文章,之前做过几年的Java开发,发现JavaScript虽然也是面向对象的语言但是确实有很多不同之处.就本篇博客,主要学习总结一下最近学习到的JavaScrip ...
- Javascript学习1 - Javascript中的类型对象
原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...
- JavaScript中值类型和引用类型的区别
JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...
- 关于javascript中变量及函数的提升
javascript中变量以及函数的提升,在我们平时的项目中其实还是挺常用的,尤其是大型项目中,不知不觉就会顺手添加一些变量,而有时候自己的不小心就会酿成一些不必要错误,趁有时间整理一下自己对于js中 ...
- 浅谈Java和JavaScript中变量和数据类型的区别
对于一门编程语言的学习,如果第一步是安装环境,那么第二步一定是学习这门语言的基本规则,变量和数据类型则首当其冲 JavaScipt作为一个蹭Java热度而命名的语言,在很多方面和Java也有一定的相似 ...
- JavaScript中变量和函数声明的提升
现象: 1.在JavaScript中变量和函数的声明会提升到最顶部执行. 2.函数的提升高于变量的提升. 3.函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找. 4.匿名函数不会提升. ...
- 小结 javascript中的类型检测
先吐槽一下博客园的编辑器,太不好用了,一旦粘贴个表格进来就会卡死,每次都要用html编辑器写,不爽! 关于javascript的类型检测,早在实习的时候就应该总结,一直拖到现在,当时因为这个问题还出了 ...
- JavaScript中变量声明有var和没var的区别
JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...
- javascript 中的类型
javascript 中的类型 js 是一门弱语言,各式各样的错误多种多样,特别是确定返回值有问题的时候,你会用什么来进行表示错误? 我一般有三个选择: null '' error {} 第一个选择 ...
随机推荐
- iOS 之 UICollectionView
1. iOS 之 UICollectionView 之 原理介绍 2. iOS 之 UICollectionView 之 开发步骤 之 OC 3. iOS 之 UICollectionView 之 开 ...
- Oracle 去掉重复字符串
create or replace function remove_same_string(oldStr varchar2, sign varchar2) return varchar2 is /** ...
- PHP那些最好的轮子
PHP那些最好的轮子 Databse 数据库ORM Doctrine 2 License : MIT Source Code Allo点评:Doctrine是功能最全最完善的PHP ORM,社区一直很 ...
- 有效的GOCsharpHelper1.0(源代码开放)
csharp编写界面,调用基于opencv的图像处理类库,是解决一类问题的优良方法.经过不懈研究,有最新进展: 一.目前情况和优点 位置在11.通过clr 架在c ...
- 深入了解Android中的AsyncTask
AsyncTask,即异步任务,是Android给我们提供的一个处理异步任务的类.通过此类,可以实现UI线程和后台线程进行通讯,后台线程执行异步任务,并把结果返回给UI线程. 我们知道,Androi ...
- mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等
使用bootstrap-fileinput 使用方式: 1.nuget:Install-Package bootstrap-fileinput 2.语言本地化{下载fileinput_locale_z ...
- CodeForces 721A
A. One-dimensional Japanese Crossword time limit per test:1 second memory limit per test:256 megabyt ...
- [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- RabbitMQ小白菜学习之在window下的安装配置
RabbitMQ安装 首先需要下载RabbitMQ的平台环境Erlang OTP平台和RabbitMQ Server(windows版): OTP 19.1 Windows 64-bit Binary ...
- 《InsideUE4》UObject(四)类型系统代码生成
你想要啊?想要你就说出来嘛,你不说我怎么知道你想要呢? 引言 上文讲到了UE的类型系统结构,以及UHT分析源码的一些宏标记设定.在已经进行了类型系统整体的设计之后,本文将开始讨论接下来的步骤.暂时不讨 ...