在编程语言中,表示和操作值的类型的被称作数据类型(type),编程语言最基本的特性是能够支持多种数据类型;
想要保存一个值已被将来使用,将这个值赋值给一个变量(变量是一个值的符号名称),可以通过符号名称来引用这个值;
javaScript数据类型分为两种数据类型:原始类型和对象类型,原始类型(数字、字符串、布尔值、两个特殊的原始值undefined和null),对象类型(数组和对象)
1、数字:js不区分整数值和浮点数值,js中所有数字都是用浮点数值表示的
整型直接量:
1
10
14
15
浮点型直接量;
0.1
.56
0.45
js中的算数运算:js除了基本的+加、-减、*乘、/除、%求余,js还支持更加复杂的运算符,通过math对象的属性定义的函数和常量来实现:
Math.pow(1,3) // 代表1的3次幂
Math.round(.6) //四舍五入
js中的算数运算在溢出、下溢或被零整除时不会报错,当运算结果超出了js所能表示的数字的上线,结果是infinity(无穷大),当负数超过了js所能表示的最大负值则是-infinity(负的无穷大),下溢是运算结果无限接近于零并比js所能表示的最小值还小的时候会返回一个特殊的值‘负零’,这个值几乎跟正常的零是一样的,
运算符和不是数字的值进行运算时会返回NaN,也包括零除以零,他是没有意义的,也将返回NaN
js定义了全局变量Infinity和NaN,用来表示无穷大和非数字值,在es3中这两个值是可读写的,并且可以修改,es5中修改了这个错误,改为她们只是可读的
Date()构造函数,用来创建表示时间和日期的对象,日期方法对日期计算提供一些api,日期不像数字那样是基本数据类型
2、文本
字符串是有一个16位值组成的不可变的有序序列,js字符串(数组)的索引从零开始,空字符串长度为零
字符串直接量:在js中字符串直接量是由单引号或双引号括起来的的字符序列,由双引号定界的里面可以包含单引号,由单引号定界的也同样可以包含双引号
"abcddde'"
'a="2"'
字符串直接量必须写在一行中,字符串直接量也可拆分成数行,每行必须以反斜线结束\,需要注意的是在写英文句子的时候有‘,撇号和单引号使用的是一个字符,在英文句子中要对别号进行转译使用\;
转义字符:在js字符串中,反斜线有着特殊的用途,反斜线后可加其他字符,将不再是反斜线当前的意思
\n // 他表示的是一个换行符
\b // 退格符
\t // 水平制表符
\" // 双引号
\' // 撇号或单引号
字符串的使用,字符串内置对像之一就是字符串连接,加号运算符用于数字是求相加求和的值,字符串中则是拼接字符串;
a = 'a'+'b'
a // 'ab'拼接后打印的值
确认一个字符串的长度使用length属性,除了length字符串还提供很多可以调用的方法
var str = "hellow,world"
str.charAt(0) // "h" 获取到第一个字符
str.charAt(str.length-1) // "d"获取到最后一个字符
str.substring(1,4) // "ell"第二到四个字符
str.slice(1,4) // 同上
str.slice(-3) // "rld"最后三个字符
str.indexOf("l") // 2 字符"l"首次出现的位置
str.lastIndexOf("l") // 10 字符"l"最后一次出现的位置
str.indexOf("l",3) // 3 在位置3及之后首次出现字符l的位置
str.spilt(", ") // ["hellow","world"]分割成子串
str.replace("h","H") //"Hellow,world"全文字符替换
str.toUpperCase() // 英文大写转换
在js中字符串是固定不变的,通过某些方法改变字符串都不会改变原字符串,而是返回一个新的字符串
3、布尔值
布尔值指的是真或假,这个类型只有两个值,保留字true和false,js中比较的语句的结果通常都是布尔值
会被转换为false的值有:
undefined
null
0
-0
NaN
"" // 空字符串
4、null和undefined
null是js语言的关键字,常用来描述空值,对null执行typeof预算,返回字符串object,null是的一个特殊的对象值,含义是“非对象”,null可以表示字符串、数字对象、无值;
undefined也是来表示值的空缺,主要表示一个变量在还没有使用var关键字声明时,就去使用的情况下,通常会报错,报错为undefined,代表这个变量还未定义
5、全局对像
非常重要的对象(全局对象 global object)在js中有着重要的用途,js解释器启动时,他将创建一个全局对象,全局对象内定义了初始属性:
全局属性:比如undefinec、Infinity和NaN
全局函数:比如isNaN()、parseInt()和eval()
构造函数:比如Date()、RegExp()、String()、Object()和Array()
全局对象:比如Math和JSON
可以使用js关键字this来引用全局对象,全局window对象有一个属性window引用其自身,他可以代替this来引用全局对象
6、包装对象
对象属性的访问是通过.点来获取属性值的,比如说字符串、数字、布尔值都是有对应的对象属性,调用她们的属性,会创建一个临时对象,使用完后会自动销毁;则undefined和null是没有包装对象的,如果访问两者的属性将会报错
let s = "test"
s.len = 4 // 当给字符串设置属性是会临时创建一个临时对象
let b = s.len // 打印a的时候,上一个临时对象已经销毁自然不存在len属性,所以是分文不到的