javaScript-数据类型和数据类型转换
特别声明,以下为达内科技web前端讲师张东张老师的原创笔记,未经允许,不可转于其他商用,仅供学习。
1. 什么是JavaScript:专门编写网页交互的语言
2. 什么变量:内存中存储*一个*数据的存储空间,再起一个名字
声明: 创建一个变量, var 变量名;
赋值: 将等号右边的数据保存到等号左边的变量中。变量名=值;
取值: 在任何位置使用变量名等效于直接使用变量中的值
特殊:1. 简写:var 变量名=值;——建议
***2. 声明提前:在正式执行程序前,都会预读所有var声明的变量,集中到顶部集中创建。***赋值留在原地***
解题:先改为声明提前后的状态,再判断输出
3. 出错:仅声明,但未赋值的变量,可以使用。
未声明的变量,可以直接赋值——强烈不建议
未声明的变量参与运算或表达式:
报错:Reference Error
3. 数据类型:2大类:
第一大类型:原始类型->值直接保存在变量本地的 数据类型
【5个】:Number String Boolean undefined null
Number: 64位=8字节,所占空间与数值大小无关
特殊:舍入误差:计算机中也有计算不尽的数值
解决:按指定小数位数四舍五入->n.toFixed(d)
String:一串字符组成的一句话
js中用unicode编号保存每个字符
unicode:对全球主要语言中的每个文字编一个号
查看任意字符unicode号: "字".charCodeAt(0)
内存占用:一个英文字母,数字或符号占1字节,汉字占2字节
特殊:字符串一旦创建无法改变,只能整体替换。
因此会导致一个结果:每次字符串+拼接时都会浪费一个字符串
一串数字何时加"":
如果数据可能用作算数计算或比较时,不加引号-Number类型
比如:年龄 价格 数量
如果数据不可能用作算数计算或比较时,就加引号-String类型
比如:QQ 身份证 手机号
Boolean:只有两个值: true/false
何时使用:用作条件或结论时
第二大类型:引用类型->值无法直接保存在变量本地的 数据类型。
Why:js为什么会有数据类型转换?
****js是弱类型语言,有3个特点:****
1. 声明变量时,不用提前指定数据类型
2. 同一个变量,先后可保存不同类型的数据
3. js会根据自身的需要,自动转换数据类型使用
数据类型转换:2大类:
1. 隐式转换:不需要程序员干预,js自动完成的类型转换
算数运算中的隐式转换:
1. 默认都转为数字,再运算
2. +运算中,只要一个数据是字符串:
+变为字符串拼接,不是字符串的数据,被转为字符串
特殊:默认情况:bool类型:true-->1 false-->0
如果转不成数字,则转为NaN
NaN参与算数运算,结果永远为NaN
2. 强制转换:程序员主动调用函数实现的类型转换
任意->字符串:2个函数
var str=x.toString() x不能是null或undefined
var str=String(x) 万能——相当于隐式类型转换
一般都是自动调用,不需要手动调用
检测数据类型:typeof(x)-->返回类型名
其实String(x)的源码:
function String(x){
if(x===null){
return "null";
}else if(x===undefined){
return "undefined";
}else{
return x.toString();
}
}
补:var value=x.valueOf(),仅取出x内部的值,不做类型转换
鄙视题:区分String() toString() valueOf()
任意->数字:3个函数
任意->数字:var n=Number(x) -->相当于隐式转换
强调:Number中只能转换纯数字组成的内容
特殊:Number(null)->0 Number(undefined)->NaN
Number("")->0
何时使用:隐式转为数字时自动调用
【字符串->数字】:
var n=parseInt(str)
从左向右,依次读取str中的数字字符
直到碰到第一个非数字字符就退出
自动跳过开头的空字符
不认小数点,省略小数部分
var n=parseFloat(str)
认识第一个小数点
何时使用:字符串类型转数字时使用
Number vs parseXXX
对于bool类型:Number可以转,parseXXX转不了
对于结尾带单位的字符串: Number不能转换,parseXXX可以转
任意->bool: Boolean(x)——隐式转换
规则:除了 0,NaN,null,undefined,"",转为false外,
其余都转为true。