什么是数据类型?
“数据类型”,表示了变量包含数据的本质特征,我们在写代码的时候,使用的都是变量的形式去做各种各样的操作.那么变量中就包含着我们使用或操作的数据.比如字符串变量包含一个字符串,数值变量包含一个数值等等.
JavaScript属于”宽松类型”的编程语言,JS变量在不同的场合可以被解释为不同的类型.
JS中,不必事先声明变量的数据类型就可以使用变量,JS的解释程序会根据场合,做出它认为正确的判断.这也就是为什么JS被称为弱类型语言.
JS是在运行时检查变量类型的,所以JS也是动态类型语言.
一,数值
整数
整数可以是正整数,负整数和0.
浮点数
就是带小数的数 小数部分可以为0 .
123.4e5:表示123.4乘10的5次幂.
0x作为前缀表示十六进制的数.
非数值(NaN)
当脚本尝试把一些非数值数据当做数值处理,却无法得到数值时,其返回值就是NaN.(eg:”20”转成整数20,”2x”转成整数就是NaN了)
可以通过isNaN(参数)的方法,检测是否为非数值.
isNaN(4):false
isNaN(“2x”):true
parseFloat()和parseInt()
这两个方法都可以将字符串转换成数值.
parseFloat会返回浮点数,parseInt会返回整数.
如果传入的参数以数字开头,那么会解析到数字结束,将解析到的内容返回.如果参数以非数值开头,那么会直接返回NaN.
parseFloat(“123.4”):123.4
parseFloat(“123xx2”):123
parseFloat(“123.0xx2”):123
parseFloat(“xx234xdf”):NaN
解析方式parseFloat与parseInt一致,只不过parseInt返回的是整数
但是parseInt可以接收第二个参数,可以指定数值的基(就是是几进制,可以指定是二进制数还是八进制或十六进制等)
parseInt(10.23,10):10
parseInt(“10xx”,10):10
parseInt(“0011”,2):3
parseInt(“xxx”):NaN
无穷大
大多数JS的版本中,支持的最大数值为2的53次幂,如果超出了这个数,那么就是无穷大:Infinity.
还有一个负数的无穷大:-Infinity.
通过isFinite(参数)方法可以检测参数值是否是有限的.会先判断是否可以将参数转换成数值,如果不能则返回false,可以的话再判断数值的大小.
isFinite(“xxx”):false
isFinite(2):true
isFinite(如果这里传入的数值大于2的53次幂):false
二,字符串
字符串是由特定字符集(通常是ASCII或通用字符集)里的字符组成的序列,通常用于保存文本内容.
字符串的定义是用一对单引号或一对双引号实现的;
var s1 = “this is a string”;
var s2 = “”; 表示一个空的字符串
转义序列
如果要在字符串中表示一些特殊字符(如制表符,换行符,单引号双引号等),需要以反斜线()作为开头来表示,这种组合方式就叫做转义字符.
转义序列 | 代表的字符 |
---|---|
\t | 制表符 |
\n | 换行符 |
\” | 双引号 |
\’ | 单引号 |
\ | 反斜线 |
\x99 | ASCII字符的值,2位十六进制表示 |
\u9999 | 统一编码字符的值,以4位十六进制表示 |
字符串的方法
方法名 | 描述 |
---|---|
concat | 连接字符串,并且返回的是连接后的一个新的字符串对象 |
indexOf | 返回指定值在字符串中出现的第一个位置,如果不存在则返回-1 |
lastIndexOf | 返回指定值在字符串中出现的最后一个位置,如果不存在则返回-1 |
replace | 替换字符串中的内容 |
split | 根据参数分割,得到分割后的字符串数组 |
substr | 从指定位置开始,获取指定数量的字符组成一个新的字符串 |
toLowerCase | 转换成小写字母 |
toUpperCase | 转换成大写字母 |
注:字符串中的所以,第一个位置为0
三,布尔值
注: 如果将布尔值用于计算,那么JS会将true转换为1,将false转换为0;
注: JS将非0值当做true处理,将0值作为false处理.并且会将下面的值也当做false处理:未定义(undefined),null,0,NaN,”“(空的字符串)
上面的这些值通常称为”类假”,”不是确切的false,但是当做false处理”.
“非”操作符(!)
这就很简单了没什么特别的.
关于null与undefined(未定义)
当我们想给变量一个有效值,但是又不是一个具体的值的时候,就把null赋值给变量,null是一个关键字.对应数值变量来讲,null代表0,对应字符串来讲,null代表空字符串”“,对应布尔值来讲,null代表false.
undefined不是一个关键字,而是预定义的全局变量.当一个变量已经被使用了, 但是却没有被赋予任何值时,它的值不是0也不是null而是undefined,表示JS不能识别这个变量.
四,数组
数组这种数据类型,可以在一个变量里保存多个值,每个值都有一个数值索引,而且能够保存任何数据类型(包括数组类型).
创建新数组
var array1 = new Array();
var array2 = [];
初始化数组
创建数组时直接加载数据
var array3 = [‘First’,’Second’,’Third’];
创建之后再添加数据
var array4 = [];
array4[0] = ‘0’;
array4[1] = ‘1’;
注: JS中的数组和Java中的数组在这里就能看到差别了,Java中数组建立时要声明长度,建立后数组长度就不能再改变了,如果想要动态添加数据,要使用集合.但是 JS 中的数组,是可以动态添加数据的,并且还有下面的一个特性.
注: JS中的数组的长度的值总是比最大索引的值大1.举例:array4[70] = “我是第七十个元素”;
那么现在array4数组中,只有三个元素,分别在角标0,1,70的位置.
但是array4.length的值仍然为71.
注: 上述操作,在Java的集合中,是不ok的,比如下面的代码就会崩溃,数组越界异常.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
ArrayList<String> arrayList = new ArrayList();
arrayList.add(70,"文档");
System.out.println(arrayList.size());
}
}
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 70, Size: 0
at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:661)
at java.util.ArrayList.add(ArrayList.java:473)
at Main.main(Main.java:9)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Hello World!
Process finished with exit code 1
数组的方法
示例几个特殊一点的.
join():可以将数组的全部元素连接在一起,得到一个字符串,由,隔开.
join(参数):可以将数组的全部元素连接起来,并且每个元素之间,由参数隔开.
slice(start,end):参数中指定的是开始的索引值和要提取的数量,与String的substr()方法类似.
sort():该方法可以把数组元素按照字母顺序排序.
splice():该方法可以在数组里添加或删除指定的一个或多个元素.
splice()方法的参数:参数1,在什么位置开始操作,参数2,要删除多少个元素,参数3,要插入的新元素的列表