JavaScript-语⾔基础(数据类型)
⼀、数据类型简介
1、为什么需要数据类型
在计算机中,不同的数据所需占⽤的存储空间是不同的,为了便于把数据分成所需内存⼤⼩不同的数据,充分利⽤存储空间,于是定义了不同的数据类型。
2、变量的数据类型
变量是⽤来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。
JavaScript 是⼀种弱类型或者说动态语⾔。这意味着不⽤提前声明变量的类型,在程序运⾏过程中,类型会被⾃动确定。
3、数据类型的分类
JavaScript 把数据类型分为两类:简单数据类型、复杂数据类型
6种简单数据类型(原始数据类型)
Undefined
Null
Boolean
Number
String
Symbol(符号-ES6新增)
简单数据类型默认值
Undefined undefined
Null null
Boolean false
Number0
String“”
复杂数据类型
object
⼆、typeof 操作符
⽤来确定变量的数据类型
是⼀个操作符,不是函数,不需要参数(但可以使⽤参数)
对⼀个值使⽤ typeof 操作符会返回下列字符串之⼀:
" undefined ":表⽰值未定义
" boolean ":表⽰值为布尔值
" string ":表⽰值为字符串
" number ":表⽰值为数值
" object ":表⽰值为对象(⽽不是函数)或 null
" function ":表⽰值为函数
" symbol ":表⽰值为符号
let message ="hi";
typeof message;//string
typeof(message);//string
typeof11;//number
注意1:调⽤ typeof null 返回的是 " object ",这是因为特殊值 null 被认为是⼀个空对象的引⽤
注意2:严格来讲,函数在 ECMAScript 中被认为是对象,并不代表⼀种数据类型。但函数也有⾃⼰特殊的属性。为此,就有必要通过typeof 操作符来区分函数和其他对象javascript说明
三、字⾯量
字⾯量是⼀种直接出现在程序中的数据值,通俗来说,就是字⾯量表⽰如何表达这个值
数字字⾯量:1, 2, 3
字符串字⾯量:‘张三’, “李四”
布尔字⾯量:true,false
四、Undefined 类型
使⽤ var 或 let 声明后没有被赋值的变量会有⼀个默认值undefined
let message //这个变量被声明了,值为 undefined
//没有声明过这个变量
//let age
console.log(message);//undefined
console.log(age);//报错
包含 undefined 值的变量跟未定义变量是有区别的。⽆论是声明还是未声明,typeof 返回的都是字符串" undefined "
如果对 age 调⽤ typeof :
let message //这个变量被声明了,值为 undefined
//没有声明过这个变量
//let age
console.log(typeof message);//undefined
console.log(typeof age);//undefined
undefined是⼀个假值,检测时需注意⾃⼰检测的是 undefined 这个字⾯值,⽽不仅仅是⼀个假值
与其他数据类型进⾏相连或者相加时
var message;
console.log(message);// undefined
console.log('你好'+ message);// 你好undefined
console.log(18+ message);// NaN
console.log(true+ message);//  NaN
四、Null 类型
只有⼀个值:null
表⽰⼀个空对象指针
在定义将来要保存对象值的变量时,建议使⽤ null 初始化
同样,null 是⼀个假值,检测时需注意⾃⼰检测的是 null 这个字⾯值,⽽不仅仅是⼀个假值
五、Boolean 类型
布尔类型有两个值:true 和 false ,其中 true 表⽰真(对),⽽ false 表⽰假(错)
布尔值的字⾯量 true 和 false 是区分⼤⼩写的, True 和 False 是有效的标识符,不是布尔值
不同类型与布尔值之间的转换规则
数据类型可以转化为 true 的值可以转化为 false 的值Undefined N/A(不存在)undefined
object任意对象null
Boolean true false
Number⾮零数值(包括⽆穷值)0、NAN
String⾮空字符串“”(空字符串)使⽤ Boolean() 函数将其他类型转换为布尔值
console.log(Boolean(''));// false
console.log(Boolean(0));// false
console.log(Boolean(NaN));// false
console.log(Boolean(null));// false
console.log(Boolean(undefined));// false
console.log(Boolean('你好'));// true
console.log(Boolean(12));// true
像 if 等流程语句会⾃动执⾏其他类型到布尔值的转换
let message ='hi';
if(message){
console.log(123);
}
//输出为123
布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0
console.log(true+1);// 2
console.log(false+1);// 1
六、Number 类型
JavaScript 数字类型既可以⽤来保存整数值,也可以保存⼩数(浮点数)
6.1 数字型进制
最常见的进制有⼆进制、⼋进制、⼗进制、⼗六进制
⼋进制(以8为基数)
第⼀个数字必须是0,跟0~7
如果包含的数字超出范围,就会忽略前缀的0,后⾯的数字序列会被当成⼗进制数
严格模式下⽆效,JavaScript 引擎会抛出语法错误
let num1 =070;//⼋进制的 56
let num2 =079;//⽆效的⼋进制值,当成 79 处理
let num3 =08;//⽆效⼋进制值,当成 8 处理
⼗六进制(以16为基数)
数值前缀为 0x (区分⼤⼩写),数字不区分⼤⼩写
0x 跟 0-9 以及 A-F (字母⼤⼩写均可)
let num4 =0xA//⼗六进制 10
let num5 =0x1f//⼗六进制 31
使⽤⼋进制和⼗六进制格式创建的数值,在所有数学操作中都被视为⼗进制数值
由于 JavaScript 保存数值的⽅式,现实中可能会存在正零( +0)和负零( -0 ),正零和负零在所有情况下都被认为是等同的6.2 浮点数
要定义浮点数,数值中必须包含⼩数点,⼩数点后⾯必须⾄少有⼀个数字
保存浮点数的内存空间为整数的两倍,如:10.0 会被当成整数 10 处理
对于⾮常⼤或⾮常⼩的数,⽤e/E(科学记数法)表⽰
//表⽰⼀个乘以 10 的给定次幂的数值
//以 3.125 为系数,乘以 10 的 7 次幂
let floatNum =3.125e7//等于 31250000
//默认情况下,ECMAScript 会将⼩数点后⾄少 6 个零的浮点数转换为科学记数法
//0.000 000 000 000 000 07
let floatNum =3e-17
浮点数的精确度最⾼可达 17 位⼩数,但在算数计算中远不如整数精确
例如:0.1 + 0.2 得不到 0.3,⽽是 0.300 000 000 000 000 04
6.3 数字型范围
因为内存限制,ECMAScript 并不⽀持表⽰世界上所有数值
最⼤值:Number.MAX_VALUE,这个值为:1.797 693 134 862 315 7e+308
最⼩值:Number.MIN_VALUE,这个值为:5e-32
如果超出最⼤值范围,这个数值会⾃动转化为 Infinity(正⽆穷)、-Infinity(负⽆穷)
要确定⼀个值是不是有限⼤,可以使⽤ isFinite() 函数
let result = Number.MAX_VALUE+ Number.MAX_VALUE
console.log(isFinite(result));//false
6.4 NaN
意思是:不是数值(Not a number)
console.log(0/0)// NaN
console.log(-0/+0)// NaN
console.log(5/0)// Infinity
console.log(5/-0)// -Infinity
NaN 不等于包括 NaN 在内的任何值
console.log(NaN==NaN)//false
使⽤ isNaN() 函数,判断是不是数值。把⼀个值传给 isNaN() 后,该函数会尝试把它转换为数值任何不能被转换为数值的值都会导致函数返回 true
console.log(isNaN(NaN));// true
console.log(isNaN(10));// false  10 是数值
console.log(isNaN('10'));// false 可以转换为数值 10
console.log(isNaN('blue'));// true 不可以转换为数值
console.log(isNaN(true));// false 可以转换为数值 1
6.5 数值转换
有3个函数可以将⾮数值转换为数值:Number()、parseInt()、paeseFloat()
Number() 是转型函数,可以⽤于任何数据类型
后两个函数主要⽤于将字符串转换为数值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。