发表于: 2017-05-31 23:23:48
1 1039
【js-01】
主题:JS有哪些数据类型和常用方法?
小课堂【深圳01期】
分享人:陈中彬
目录
1. 背景介绍
2. 知识剖析
3. 常见问题
4. 解决方案
5. 编码实战
6. 扩展思考
7. 参考文献
8. 更多讨论
1.背景介绍
1.1 基本概念
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
1.2 发展现状
有人认为JavaScript是最好的语言,有人认为它一团糟。可按照C++之父的话来讲:
世界上只有两种编程语言:一种是天天被人喷的,另一种是没人用的。
不论你喜欢承认与否,JavaScript已经一天比一天火了,甚至火得有点过头,生态圈太过繁荣,每个月都可能有新的相关构建工具、开发框架或者别的什么库发布。JavaScript已经逐步发展成为了一门流行可靠的语言,但与此同时也变得臃肿起来,框架工具之间各种复杂的依赖甚至能让你崩溃。
2.知识剖析
JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。分别是undefined、null、boolean、number、string、object(ES6新增第七种 Symbol 一种数据类型,它的实例是唯一且不可改变的。类型的值)
2.1 Undefined 类型
在使用var声明变量,但未对其加以初始化时,这个变量的类型就是undefined,且其默认初始化值为undefined。
对未声明与初始化的变量,直接使用,那么这个变量的类型也是undefined,但是没有默认初始化值。
实例:
//undefined
var message;
alert('已经声明但未初始化的变量message的类型是:' +typeof message)
alert('未声明,也未初始化的变量age的类型是:'+ typeof age)
【总结】因为js的变量都是用关键字var来声明的,变量的具体类型取决于他被赋予的变量值,而对于以上两种情况,虽然本质上有区别,但是都没有被初始化,所以其类型都是undefined。但是后者没有初始化值。
2.2 Null 类型
Null数据类型也是一个只有一个值的数据类型。其特殊值就是Null。
从逻辑上看,null是一个空的对象指针。当使用typeof操作符检测null值,会返回“object”
实例:
//null
var car=null;
alert('car的类型为:'typeof car);//输出:object
[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不相同
2.3 Boolean 类型
即布尔类型,该类型有两个值:true false
Bloolean()函数,可以将其他类型的值转换为布尔类型。
转换规则:
这些转换规则对理解流程控制语句,如(if)语句自动执行相应的转换非常重要。
2.4 Number类型
该类型的表示方法有两种形式,第一种是整数,第二种为浮点数。
整数:可以通过十进制,八进制,十六进制的字面值来表示。
实例:
var intNum=55;//十进制
var octalNum=070;//八进制数,第一位必须是0,解析为56
var octalNum=079;//无效的8进制数,9超过了8进制数的范围,解析为79
var hexNum=0xA;//十六进制数,前两位必须是0x,后跟16进制数字(0~9及A~F)
浮点数:
1、该数值中必须包含一个小数点,且小数点后必须有一位数字,如果小数点后只有零,则该小数会被转化为整数。
2、浮点数所占据的内存空间是整数的两倍。
3、对极大极小的浮点数采用e表示法。
实例:
var floatNum=3.2e7;//3.2×10(7次幂)
var floatNum=3.2e-7;//3.2×10(-7次幂)
NaN:
1、即非数值,是一个特殊的值,表示一个本来要返回数值的操作未返回数值的情况,省去报错。
2、NaN有两个不同寻常的特点:任何涉及NaN的操作都会返回NaN,NaN值与任何值都不相等,包括本身。
3、isNaN()函数,这个函数可以判断,传递的参数是否“不是数值”这里涉及数值转换的问题,例如“10”这个字符串就可以转换为10,但是“blue”这个字符串则无法转换为数字,所以isNaN("blue")==true
数值转换:
1.转数值:parseInt() 和 parseFloat()。
2.转字符串: .toString() 。
3.强制转换:访问数据内部内容,并将符合格式的内容进行转换:Boolean(value) - 把给定的值转换成 Boolean 型;Number(value) - 把给定的值转换成数字(可以是整数或浮点数);String(value) - 把给定的值转换成字符串;
2.5 String 类型
字符串类型是最熟悉不过的,至于用单引号,还是双引号,在js中还是没有差别的。记得成对出现。
字符串中一些特殊的字面量,即转义序列。例如:/n - 换行;/t - 制表;/b - 空格;/r - 回车等
toString()函数,每个值都有,但是null与undefined没有。一般情况下使用这个函数时,没有必要传递参数,但是调用数值的 toString()方法时,可以传递基数,默认传递的是10,代表十进制。
String()函数可以将任何类型的值转换为字符串,包括null转换为'null'、undefined转换为'undefined'。
2.6 Object 类型
Object数据类型,称为对象,是一组数据和功能(函数)的集合。可以用new操作符后跟要创建的对象类型的名称来创建。也可以用字面量表示法创建。在其中添加不同名(包含空字符串在内的任意字符串)的属性。
创建对象有两种方法:1.定义并创建对象的实例;2.使用函数来定义对象,然后创建新的对象实例;
person=new Object(); //定义一个名为person的对象
person.name="John"; //对象name属性值为John
person.age=56; //对象age属性值为56
person.eyeColor="blue"; //对象eyeColor属性值为blue
替代语法(使用对象 literals):
person={name:"Bill",age:56,eyeColor:"blue"};
3.常见问题
怎么样判断各种数据类型?
4.解决方案
了解js的都知道, 有个typeof 用来判断各种数据类型,有两种写法:typeof xxx ,typeof(xxx)
实例:
var a = 1; console.log(typeof a); //输出 number
var a = '1'; console.log(typeof a); //输出 string
var a = true; console.log(typeof a); //输出 boolean
var a = undefined; console.log(typeof a); //输出 undefined
var a = null; console.log(typeof a); //输出 object
var a = document; console.log(typeof a); //输出 object
var a = []; console.log(a); //输出 object
var a = {}; console.log(a); //输出 object
var a = function(){}; console.log(typeof a) //输出 function
这里面包含了js里面的五种数据类型 :number、string、boolean、undefined、object和函数类型function)
看到这里你肯定会问了:我怎么去区分对象,数组和null呢?
接下来我们就用到另外一个利器: Object.prototype.toString.call
这是对象的一个原生原型扩展函数,用来更精确的区分数据类型。
实例:
var getType=Object.prototype.toString;
getType.call('aaaa');//输出 [object String]
getType.call(2222);//输出 [object Number]
getType.call(true);//输出 [object Boolean]
getType.call(undefined);//输出 [object Undefined]
getType.call(null);//输出 [object Null]
getType.call({});//输出 [object Object]
getType.call([]);//输出 [object Array]
getType.call(function(){});//输出 [object Function]
看到这里,刚才的问题我们就解决了。
5.编码实战
6.拓展思考
JavaScript 类型转换有哪些?以及如何转换?
更多请参考:http://www.runoob.com/js/js-type-conversion.html
7.参考文献
w3c:http://www.w3school.com.cn/js/js_datatypes.asp
脚本之家:http://www.jb51.net/article/91477.htm
阮一峰:http://javascript.ruanyifeng.com/#introduction
8.更多讨论
判断数据类型还有没有更多方法?
评论