1.背景介绍
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
数据类型是什么
“数据类型”在数据结构中的定义”一个值的集合以及定义在这个值集上的一组操作”。在编程语言中,能够表 示并操作的值的类型称做数据类型。
- JavaScript 的数据类型,共有六种。分别是:
- 数值(NUMBER):整数和小数(比如1和1.1)
- 字符串(STRING):字符组成的文本(比如”HELLO WORLD”)
- 布尔值(BOOLEAN):TRUE(真)和FALSE(假)两个特定值
- 对象(OBJECT):各种值组成的集合
- UNDEFINED:表示”未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值
- NULL:表示无值,即此处的值就是”无”的状态
- (ES6新增第七种 Symbol 一种数据类型,它的实例是唯一且不可改变的。类型的值)
2.知识剖析
数值
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。 该类型的表示方法有两种形式,第一种是整数,第二种为浮点数。整数:可以通过十进制,八进制,十六进制的字面值 来表示。浮点数:就是该数值中必须包含一个小数点,且小数点后必须有一位数字。还有一种特殊的数值,即NaN (非数值 Not a Number)。
字符串
用于表示由零或多个16位的Unicode字符组成的字符序列,即字符串。至于用单引号,还是双引号,在js中还是没有差别 的,记得成对出现。字符串默认只能写在一行内,分成多行将会报错。
布尔值
布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只 有这两个值。我们这需要注意下,Boolean类型的字面值true和false是区分大小写的。也就是说,True和False(以及其它的 混合大小形式)都不是Boolean值,只是标识符。
对象
Object数据类型,称为对象,是一组数据和功能(函数)的集合。可以用new操作符后跟要创建的对象类型 的名称来创建。也可以用字面量表示法创建。在其中添加不同名(包含空字符串在内的任意字符串)的属性。对象是带有 属性和方法的特殊数据类型,是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
UNDEFINED
undefined表示“未定义”,如果使用的对象属性不存在或者是未声明变量,undefined 值将被返回。 一个未初始化的变量的值就为undefined。
null
null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示 该参数为空。null值表示了一个空对象指针,但是null不等于undefined。 null用来表示空值,即没有对象被呈现,我们可以通过将变量的值设置为 null 来清空变量:
常见问题
null与undefined的区别?如何判断
怎么样判断值的数据类型?
4.解决方案
1.null与undefined的区别?
null与undefined都可以表示“没有”,含义非常相似。 它们区别是这样的:null是一个表示“空”的对象,转为数值的时候为0;undefined是一个表示”此处无定义”的原始值, 转为数值时为NaN。详见demo中返回undefined的典型例子
2.怎么样判断值的数据类型?
使用typeof运算符来进行检测
如果判断的是基本类型,则typeof会尝试得到最基本的类型,比如number,string等等,如果是函数名,那么则返回 function,这里Object,Number,String,等等都可以看成函数名,如果判断的是一个基本的对象,则返回object 注:我们发现typeof null,结果返回了object,这是一个很早之前的BUG,一直沿用至今。 试用范围:如果通过typeof 来判断类型,适用于判定基本类型,或者判断是否为函数。
5.编码实战
6.扩展思考
JavaScript 类型转换有哪些,该怎样转换?
JavaScript 变量可以转换为新变量或其他数据类型:
可以通过使用 JavaScript 函数
也可以通过 JavaScript 自身自动转换
使用 JavaScript 函数
Number() 函数把对象的值转换为数字。
String() 函数把对象的值转换为字符串
一元运算符 + 可用于将变量转换为数字
自动转换类型
当 我们尝试操作一个 “错误” 的数据类型时,JS会自动帮我们转换为 “正确” 的数据类型。 即使输出来结果不是我们所期望的:
3 + null // 返回 3 null 转换为了数字 0
“3” + null // 返回”3null” null 转换为 “null”
“3” + 1 // 返回 “31” 数字 1 转换为了字符串 “1”
“3” - 1 // 返回 2 这里字符串”3” 转换为了数字 3
7.参考文献
参考资料:https://www.jianshu.com/p/248737f3d6f3
—— javascript数据类型
参考资料:http://javascript.ruanyifeng.com/#introduction
—— 阮一峰:Javascript标准参考
参考资料:
—— js如何判断变量的数据类型?
8.更多讨论
ES6新增的第七种基本类型有什么作用呢?
typeof的局限性?
9.互动提问
Symbol是什么?
答:ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。
凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
new操作符具体干了什么呢?
答:(1)创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
(2)属性和方法被加入到 this 引用的对象中。
(3)新创建的对象由 this 所引用,并且最后隐式的返回 this 。
JS基础类型和对象,分别是按值传递还是按引用传递?
答:JS的基本类型,是按值传递的;而对象是通过引用传递,而不是值传递。也就是说,变量赋值只会将地址传递过去。