一 什么是数据类型
内存中存储不同数据的存储格式
二 JS中2大数据类型–原始类型数据
(一)原始类型含义
值保存在变量本地的数据类型
(二)原始类型分类(5种)
1. Number类型
(1)含义
专门保存数字的类型,不加引号
(2)何时使用
要参加算数计算或比较大小的数据,比如:价钱 年龄
(3)所占空间
64位二进制数保存,数字所占空间和数值大小无关,所有数字都占8字节
1GB=1024MB
1MB=1024KB
1KB=1024bytes
1byte=8Bit
(4)舍入误差
因为计算机中无法精确表示1/10,导致计算机中产生的误差,不可避免!
解决:四舍五入-no.toFixed(2) --将n按2位小数四舍五入
/*声明变量,保存总价total: 1.6
再声明变量,保存收款金额money:2
用程序计算找零change,保存在变量中
输出找零
*/
var total=1.6;
var money=2;
var change=money-total;
console.log(change)//0.3999999999999999
console.log(change.toFixed(2));//0.40
//将change中的数据,按2位小数四舍五入
2. String类型
(1)含义
专门保存一串字符的序列,必须带引号
(2)何时使用
保存文字时,或保存仅用于显示的数字时
比如:姓名 身份证号 手机号 QQ号
(3)占用空间
JS的程序内存中的字符都是用unicode标识的
- unicode–对全球主要语言中的每个字符都编一个号
- 每个字母、标点–占用1字节
- 每个汉字–占用2字节
比如:“Hello马里奥”==》占用11个字节
//查找汉字unicode编号
var str="向";
str.charCodeAt(0);//21521
//将unicode号转化为二进制
var n=21521;
n.toString(2);//101010000010001
(4)重要特点
- 字符串内容一旦创建,不可改变!
- 要想改变只能创建新字符串,替换旧字符串
- 如果参与+运算的值中包含字符串类型数据,+法运算自动变为字符串拼接!
var str1="Hello";
var str2="World";
var str=str1+str2;
console.lo(str);//HelloWorld
var n="2";
var m="3";
var r=n+m;
console.log(r);//"23"
/*笔试题*/
var str="Hello"+"world";
//共创建过几个字符串?3个
3. Boolean类型
(1) 含义
专门保存真/假二选一的类型,只有两个值true/false
(2) 何时使用
如果表示二选一的值时,就用Boolean类型
4. undefined类型
只有一个值undefined
5.null类型
表示不指向任何地址
三 JS中2大数据类型–引用类型数据
(一)引用类型含义
值不保存在变量本地的数据类型
四 数据类型转换(2大类)
(一)隐式转换
1. 隐式转换含义
无需程序员干预,js自动完成的类型转换,var str=String(x);
2.算数计算中的隐式转换
(1)正常算法–>转为number类型
算数计算中,一切类型都隐式转为number类型,再计算
比如:“2”–>2 true/false–>1/0
(2)特殊+运算–>转为字符串
+运算中,只要有一方是字符串,两数据都转为字符串,且+运算变为字符串拼接!
var n1=2,n2=3;
var s1="2",s2="3";
var b1=true,b2=false;
console.log(n1+n2);//5
console.log(n1+s2);//23
console.log(b1+s2);//true3
console.log(s1-b1);//1
console.log(s2-n1);//1
console.log(s2+n2+b1);//33true
console.log(b1+n2+s2);//43
console.log(s1+b1-n2);//NaN
3. 隐式转换,仅影响表达式的运算结果,不影响变量中存储的实际值
(二)强制转换
1. 强制转换含义
程序员通过主动调用专门函数,执行转换
2. 任意类型 to String(2种)
(1)var str=x.toString()
JS中,一切数据都有toString方法
(2)var str=String(x)–>隐式转换的原型
(3)何时使用
程序在需要时,自动调用,很少自己调用
3.任意类型 to Number(2种)
(1)var n=Number(x)–>隐式转换的原型
要求纯数字组成
如 Number(“2true”);//NaN
(2)String to Number
① var n=parseInt(str)–转整数
原理:从str开始位置逐个读取每个字符,直到碰到第一个不是数字的字符时,停止读取,自动忽略开头碰到的空格
例如:parseInt(“2true”);//2
var width="12px";
width+"2px"-->"12px2px"
Number(width)+Number("2px")-->NaN
parseInt(width)+parseInt("2px")-->14
var width="12px";
/*将12px+2px,后再保存回width变量中
width中的值,必须带单位
*/
width=parseInt(width)+2+"px";
console.log(width);
var money="$400";
parseInt(money) //NaN
parseInt("34.56") //34
"34.56"; 34
② var n=parseFloat(str)–转小数
原理和parseInt完全一致!但是parseFloat只认第一个小数点
parseFloat("34.56") //34.56
parseFloat("34.56.78") //34.56
③ Number(x) vs parseInt(str)
Number(x) | parseInt(str) | |
---|---|---|
“12px” | NaN | 12 |
true | 1 | NaN |
何时使用 | 任意类型 to Number | String to Number |
4.任意类型 to Boolean(1种)
(1) var bool=Boolean(x)–>隐式转换
(2)"" NaN undefined null 0 -->false
(3)其余 --> true
//Step1: 请用户输入薪资,保存在变量salary中
var salary=parseFloat(prompt("请输入薪资:"));
console.log(typeof(salary));
//Step2: 将salary中薪资+1000
salary=salary+1000;
console.log(typeof(salary));
//Step3: 输出涨薪后的薪资
/*window.*/alert("涨薪后的薪资是"+salary);
五 API
(一)typeof(x)
专门用于判断x的数据类型,返回数据类型名
typeof(NaN)//number