02-JS中的数据类型及类型转换
一、数据类型
JS中的值,无论是字面量还是变量,都有明确的类型。
(一)概述
1.基本类型5种
number 数字类型
string 字符串类型
boolean 布尔类型,仅有两个值true和false
undefined undefined类型,此类型值只有一个,就是undefined
null null类型,这种类型的值也就只有一个null
2.引用类型
(二)数据类型的检测
使用typeof关键字检查数据类型,通常用来检测变量的类型,因为直接量的类型一眼就看的出来
var a = 123;
console.log(typeof a); //number
1.number数字类型
//下面定义的变量都是number类型
<script>
var a = 200;
var b = -200;
var c = 200.235;
var d = .5e4;
var e = 0xf0;
var f = 016;
var g = Infinity;
var h = NaN;
console.log(typeof a);
console.log(typeof b);
console.log(typeof c);
console.log(typeof d);
console.log(typeof e);
console.log(typeof f);
console.log(typeof g);
console.log(typeof h);
</script>
number类型的东西,所有的数字(不分正负、整浮、大小、进制、infinity、NaN)
2.string字符串类型
var str1 = "小蔡啊";
var str2 = "666";
var str3 = ""; //空字符串也是字符串
console.log(typeof str1);
console.log(typeof str2);
console.log(typeof str3);
3.boolean类型
boolean类型(布尔类型),布尔类型只有两个值true false,即真或假。
var bool = true;
console.log(bool );
console.log(typeof bool); //boolean
注意:此时true和false没有加引导,所以不是字符串,同时注意它也是变量,true是一个关键字,本身就有特殊意义,表示真和假。
4.undefined类型
前面提到过,如果只var了一个变量,没有赋初值,它的默认值是undefined。
这个undefined是自成一家,类型和值都是undefined,这种类型的值也只有一个。
var un; //这里只定义了,没有赋初值
console.log(un);
console.log(typeof un); //undefined
(三)变量的类型
变量是什么类型,和赋值有关,而和定义的时候是没有关系的。定义的时候都是使用var关键字定义。
//动态数据类型
var num = 123; //number
console.log(typeof num);
num = "哈哈"; //改为string是合法的
console.log(typeof num);
我们说JS这个语言叫做动态数据类型,就是赋值的时候就决定这个变量的类型了。甚至可以改变这个变量的值,为其他类型的值。变量的类型是自动检测,就是检查变量存储的值的类型,不是认为定义的。
二、运算符:加号 +
加号两边都是数字的时候,那么就是数学加法;
两边只要有一边是字符串,那么结果就是字符串拼接。
console.log("小" + "蔡"); //小蔡
console.log(3 + 2); //5
console.log(3 + "2"); //32
多个加号,运算顺序是从左至右
<script>
var a = 3;
var b = 2;
var c = 5;
console.log( a + b + c); //10
console.log( a + b + 'c'); //5c
console.log( 'a' + a + b + 'c'); //a32c
console.log( 1 + 2 + "a" + "(3 + 4)"); //3a(3 + 4)
</script>
运算从左到右计算,默认是数字加分,但是一旦遇到字符串就变成字符串拼接了
三、数据类型转换
JS中有一些方法可以将内存中表示其他数据类型转换为对应的数字类型。
因此,先认识一个语句prompt(),这个语句和alert差不多,也是弹窗,弹的是输入框
prompt("请输入你的电话","191");
这些小功能,就叫做程序给我们提供的API,每个API都有自己不同的语法。
prompt("提示文本","默认值");
默认值是可以省略的。
可以把用户输入的值,存入变量:
var a = prompt("请输入你的电话","191");
alert("你输入的电话是" + a);
用prompt接收的任何东西都是字符串,哪怕用户输入了一个数字,也是字符串的数字。
(一)转number
1.Number方法
(1) string "12px"=>NaN ""=>0
(2) boolean true=>1 false=>0
(3) null null=>0
(4) undefined undefined =>NaN
(5) {} {} => NaN
(6)[] [1]=>1, []=>0, [1,2]=>NaN
(7) function Number(function(){})=>NaN
例子:
// 计算器
// 第一步让用户先输入第一个数字
var a = prompt("请输入第一个数字");
// 第二步让用户输入第二个数字
var b = prompt("请输入第二个数字");
// 第三步求和
var sum = Number(a) + Number(b);
// 第四步弹出结果
alert(sum);
2.parselnt方法
parseInt就是将一个string转为一个整数,不四舍五入,直接截取整数部分。如果这个string有乱七八糟的东西,直接截取前面数字部分。
所以使用这个方法可能会丢失小数部分
var a = "678";
var b = parseInt(a); //parseInt就把字符串678转换为数字678
console.log(b); //678
console.log(typeof b); //unmber
parseInt("200"); //200
parseInt("200.666"); //200
parseInt("200小时"); //200
parseInt("200年零2个月"); //200
parseInt("200px"); //200
parseInt("-200.9999"); //-200
parseInt()不仅能够转为整数,还可以进行进制的转换,把任何进制的数字,都换为10进制。
进制转换的字符串,用逗号隔开。
下面的运算结果都是15:
parseInt(15,10);
parseInt(17,8);
parseInt(1111,2);
parseInt("0xf",16);
parseInt("f",16);
parseInt(16,9);
parseInt("15e6",10);
parseInt("15*6",10);
3.parseFloat方法
parseFloat就是将字符串转换为浮点数
尽可能的将一个字符串转为浮点数,浮点数之后如果有乱七八糟的内容,直接舍弃。
var a = "123.456.12";
var b = parseFloat(a);
console.log(b); //123.456
console.log(parseFloat("123.66年")); //123.66
console.log(parseFloat("你说123.66年")); //NaN
也就是说,数字类型都是number,不分整数和浮点数,但是转换的时候分。
4.isNaN()方法
作用:判断一个数字是不是NaN
如果是,则结果是ture;如果不是,则结果是false
isNaN()方法的作用是判断数字是不是NaN,那它能判断其他数据类型吗?
isNaN(true) ==> false
isNaN('12.5px') ==> true
isNaN(null) ==> false
isNaN(undefined) ==> true
结论:
isNaN()这个方法会先把其他类型数据转化成数字类型,之后判断是不是NaN
(二)转string
将一个数字,与一个空字符串进行连字符运算,那么就是自动转为字符串了。
var a = 123;
var b = a + "";
console.log(b);
console.log(typeof b); //string
(三)转boolean
Boolean()方法
只有六种情况Boolean(被转换的数据)的结果是false,其余全是true。
1.0 数字0
2.NaN 数字NaN
3."" 空字符串
4.false 布尔值false
5.undefined undefined类型
6.null null类型
用的不多了解几个。。。