JavaScript学习之路-数据类型
一、数据类型
1.前言
最近会把读《Javascript高级程序设计(第三版)》 密码:2vp3
这本书的一些要点,一一分享给大家,这是第一篇基本数据类型。我已经把此书的网盘链接分享出来了,有兴趣的可以看下,JavaScript进阶必看。
2.类型
ECMAScript有5种基本数据类型:undefined、Null、Boolean、Number、String ;
一种复杂数据类型 Object;
当然还有ES6新增数据类型 Symbol ,标示独一无二的值。
1).typeof操作符
由于下面很多例子都用到这个操作符,所以先提前讲解下,这个操作符其实就是检测数据类型的。
typeof undefined ===> undefined
typeof boolean===> boolean
typeof string===> string
typeof number===> number
typeof object(**null**) ===> object
typeof function ===> function
2).undefined 类型 未经初始化的类型即为undefined;因此我们没有必要显示的给未初始化的变量显式的设置为undefined,因为它已经默认了,未初始化的值就会取undefined值
var data;
alert(data =https://www.it610.com/article/= undefined)//true
这地方有一个需要大家注意的地方,未声明的变量和未初始化的变量在使用
typeof
操作符的时候都会返回undefined
//这个变量声明但为初始化 默认值:undefined
var message;
console.log(typeof message);
//undefined
console.log(typeof a);
//a 为声明
虽然未初始化的变量会默认设置为undefined,但是我们显式的初始化变量时设置undefined也是很明智的选择,因为这样我们可以通过typeof操作符返回undefined时,来检测变量是还没声明,而不是尚未初始化。
3).Null类型 Null类型只有一个值就是null,它指向一个空指针对象,所以用
typeof
操作符检测的时候,返回Object。当我我们定义一个变量用来保存对象的时候,我们最好把这个变量初始化为null,这样一来我们只需要检测null值就可以知道相应的变量是否已经保存了一个对象的引用。var o = null;
if(o != null){do something.....}
更有趣的是 null 和 undefined 是相等的(==) 如:
console.log(null == undefined);
//true
undefiend实际上派生之null值的。上面的例子中操作符
==
总是返回 true,其实它们比较的时候 是转换为相关操作数再比较的,之后的文章会讲到。4).Boolean类型 Boolean类型,感觉在开发过程中是用到最多的类型之一了吧。就俩个值:
true
/ false
,需要注意的是 由于JavaScript 是区别大小写的,TRUE和FALSE, 并不代表布尔值,只是一个简单的标识符。要讲其他类型的值转换为Boolean,只需要调用Boolean(xxx)
数据类型转换为true的值转换为false的值BooleantruefalseString任何非空字符串''(空字符串)Number任何非0数字(包括无穷大)0 和 NaN(非数字类型not a number)Object任何不为null的对象nullUndefined无undefined
5).Number类型 最基本的数据类型就是十进制:
var a = 10;
八进制:八进制第一位必须是0,然后数字序列(0-7)如果字面值中的数字超出了范围,那么前面的零会忽略,后面的数字被当作十进制去解析:
var oc1 = 070;
八进制的 56> 7 * (8 * 1);
var oc2 = 079 ;
无效的八进制 解析为79;
var oc2 = 08 ;
无效的八进制 解析为8;
八进制在严格模式下无效,会保错
十六进制:前俩位是0x,后跟任何十六进制数字(0-9,A-F(可大写也可小写))
var h = 0xA ;
// 十六进制10var b = 0x1f;
// 十六进制的31
Number保存的最小数字是:
Number.MIN_VALUE
这个值是5e-324。保存的最大值保存在
Number.MAX_VALUE
这个值是 1.7976931348621357e+308;
如果在计算过程中超出了数值范围的话,就会返回一个无穷大 Infinity
或者 -Infinity
,这里注意不管是正无穷大还是负无穷大都不能参与运算。如果想判断一个数字是不是有穷的(最大和最小之间的数字),可以使用 isFinite()
函数,如下例子:isFinite(2);
//true
isFinite(NaN);
//false
6).NaN NaN,即非数值(not a number),它其实是一个特殊的数值,用来表示一个本来要返回数值的操作数未返回数值的情况。
NaN有俩个很非同寻常的特点,即任何涉及NaN的操作都返回NaN,NaN不与任何值相等
console.log(NaN/10);
//NaN
console.log(NaN==NaN);
//false
其中有个函数用来判断某个值是不是 不是数字。
console.log(isNaN(1));
//false
console.log(isNaN('10'));
false 可以转换为数字10
console.log(isNaN(true));
//false 转换数字1
console.log(isNaN(NaN));
//true
console.log(isNaN('s'));
//true不能转换为数字
isNaN()
也其实适用对象,调用对象的时候,首页调用对象的valueOf()
方法,然后确定该方法是否可以转换为数字,如果还是不能转换,就调用toString()
方法,再继续测试是否可以转换为数字。其中有三个函数可以把非数值转换为数值:
Number()
parseInt()
parseFloat()
;
Number()
:可以用于任何数据类型;它的转换规则如下:①:如果是Boolean的值,true和false分别转换为 1 和 0;
②:如果是数字值,只是简单的传入和返回;
③:如果是null,则返回0;
④:如果是undefined则返回NaN;
⑤:如果是字符串中只包含数字(包括正负),则转换为十进制
Number('0')=>0;
Number('123')=>123 Number('012')=> 12
;
如果字符串中包含浮点数字的,则返回相应的浮点数值;如果字符中含有十六进制的格式,则这转换为相同大小的十进制数。⑥:如果字符串为空,则转换为0
⑦:如果字符中包含上述之外的字符,则返回 NaN;
⑧:对象,调用对象的时候,首页调用对象的
valueOf()
方法,然后确定该方法是否可以转换为数字,如果还是不能转换,就调用toString()
方法,再继续按照上述规则测试返回的字符串;parseInt()
:用于字符串转换为数值;它会忽略前面的空格,直到找到第一个非空字符串,如第一个字符串不是数字字符或者负号,它会返回NaN, 所以 它转换空字符的时候 返回NaN;
如果第一个是数字符串,它会继续解析第二个。直到解析完或者遇到了一个非数字字符。它还能识别各种进制的数字字符,例子:parseInt(123red)===> 123parseInt(22.5) ==> 22(小数点不是有效的数字符)parseInt("");
NaNparseInt('OxA')://10 十六进制转换十进制parseInt('070');
//56 八进制parseInt("70");
// 70 十进制
其实 这个函数还提供了第二个参数,转换是使用的基数(多少进制)
parseInt('0xAF',16);
//175
parseFloat()
:这个函数和parseInt函数一样,不过这个函数在第一个小数点是有效的,第二个小数点就无效了。;
该函数始终忽略前导0,所以十六进制始终返回0,并且只解析十进制;还有一个要注意的是:如果要解析的字符串是一个可解析为整数的数(没有小数点,或者小数点后都是零)则返回整数。如下:parseFloat('1234bbbb');
//123
parseFloat('0xAF');
//0
parseFloat('22.5');
//22.5
parseFloat('22.34.5');
//22.34
parseFloat('098.5');
// 98.5
parseFloat('3.125e7');
// 3125000
7).String类型 字符串类型,字符串可以使用单引号
''
或者双引号""
标示。这俩种字符串的解析是一样的,不像PHP字符串的那样。但是以双引号开始,必须以双引号结束,单引也是一样。字符串中有一些特殊的字符字面量,也叫转义字符。如下:
字面量含义
\n换行\t制表\b空格\r回车\f进制\\斜杠\'单引号 在字符串中使用\"双引号 在字符串中使用
如要获得字符串的长度可以使用length属性;
字符串创建之后就不能改变了,要想改变必须销毁原来的字符串,然后用一个新的字符串填充该变量。
如果想把一个值转换为字符串有俩种方法:
① toString():每个字符串都有该方法,返回字符串的一个副本。对象、数值、布尔值、字符串都有该方法。但是undefined和null没有。这个方法也可以传一个参数 标示输出 多少进制。
② String(): 这个方法可以将任何值转换为字符串;转换规则:如果该值有toString方法,则调用;如果是 null 则返回 “null” ; 如果是 undefined 则返回 "undefined"
console.log(String(10));
// '10'
console.log(String(true));
// 'true'
console.log(String(null));
// 'null'
var par1;
console.log(String(par1));
// 'undefined'
8).Object类型 【JavaScript学习之路-数据类型】在ECMAScript中 对象就是数据和功能的结合体,对象可以通过new操作符跟要创建的对象类型名称来创建
var o = new Object()
每个对象都有下列属性和方法:
① Constructor: 保存着用于创建当前对象的函数;上面的例子 constructor 就是 Object()
② hasOwnProperty(propertyName): 检测给定属性是否存在改对象实例中 ,参数属性名必须是字符串
③ isPrototypeOf(object) :检测传入的对象是否是另一个对象的原型(后期会写相关文章)
④ propertyIsEnumerable(propertyName): 检测属性是否能够用 for-in语句枚举 参数必须是字符串
⑤ toLocaleString() 返回对象的字符串标示,该字符串与执行环境的地区对应
⑥ toSting() 返回对象的字符串标示
⑦ valueOf() 返回对象的字符串、数值 或 布尔值 .返回对象的原始值 方法用来把对象转换成原始类型的值(数值、字符串和布尔值) 默认情况下, valueOf() 会被每个对象Object继承。每一个内置对象都会覆盖这个方法为了返回一个合理的值,如果对象没有原始值,valueOf() 就会返回对象自身
注意:如果我们没有重新定义valueOf和toString,其隐式转换会调用默认的toString()方法,将函数本身内容作为字符串返回;
如果我们自己重新定义toString/valueOf方法,那么其转换会按照我们的定义来,其中valueOf比toString优先级更高
例子:
function fn() {
return 20;
}
console.log(fn + 10);
console.log(fn + 'hello');
fn.toString = function() {
return 10;
}
console.log(fn + 10);
console.log(fn + 'hello');
fn.valueOf = function() {
return 5;
}console.log(fn + 10);
console.log(fn + 'hello');
// 输出结果分别是多少?function fn() {
return 20;
}10function fn() {
return 20;
}hello2010hello15
5hello
二、总结 以上就是我们JavaScript的相关基本数据类型,如有不足之处,欢迎指正。下篇文章我们会讲解函数,尽情期待!
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 事件代理
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)