三、数据类型
JavaScript 中的数据类型分为原始类型和对象类型:
- 原始类型
- 数字
- 字符串
- 布尔值
- 对象类型
- 数组
- “字典”
- ...
特别的,数字、布尔值、null、undefined、字符串 是不可变。
// null、undefined null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。 undefined是一个特殊值,表示变量未定义。<br><br>// undefined [NaN] undefined表示未定义值。
1、数字Number
JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。下面来看一下代码示例:
JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。
转换:
•parseInt(..) 将某值转换成数字,不成功则NaN
•parseFloat(..) 将某值转换成浮点数,不成功则NaN
特殊值:
• NaN,非数字。可使用 isNaN(num) 来判断。
• Infinity,无穷大。可使用 isFinite(num) 来判断。
代码展示:
<body>
<script type="text/javascript">
var num1 = new Number(123); //创建了一个数字类型的对象
var num3 = Number(456); // 456
var num2 = 666;
var s1 = 's123';
var num4 = parseInt(s1);
console.log(num1.valueOf(),num2,num3);
console.log(num4); // NaN
if(isNaN(num4)){
console.log('not a number'); // not a number
}
else {
console.log('a number');
}
console.log(isFinite(num3)); // 是否是有限值 true Infinity表示无穷大。
console.log(typeof num3); // 'number' 返回的是字符串
var a = 1222.4444444;
console.log(a.toFixed(2)); // 1222.44
console.log(a.toExponential(3)); // 1.222e+3
</script>
2、字符串常用方法及属性
调试的地方可以在google chrome 上进行测试,F12点击"Console"
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:
可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。
常见功能:
obj.length 长度 obj.trim() 移除空白 obj.trimLeft() obj.trimRight) obj.charAt(n) 返回字符串中的第n个字符 obj.concat(value, ...) 拼接 obj.indexOf(substring,start) 子序列位置 obj.lastIndexOf(substring,start) 子序列位置 obj.substring( from , to) 根据索引获取子序列 obj. slice (start, end) 切片 obj.toLowerCase() 大写 obj.toUpperCase() 小写 obj.split(delimiter, limit) 分割 obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效) obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。 obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项, $数字:匹配的第n个组内容; $&:当前匹配的内容; $`:位于匹配子串左侧的文本; $':位于匹配子串右侧的文本 $$:直接量$符号 |
a.replace(/d+wd+/g, "$2eric$1") #不加分组的正则,后面的$不代表任何意义 "alsdf$2eric$1dsf21sfd" $1 $2 代表分组 a.replace(/(d+)w+(d+)/,"$2"+"eric"+"$1") # w+代表字母与数字 贪婪匹配 "alsdf1eric123sfd" a.replace(/(d+)[a-zA-Z]+(d+)/g,"$2"+"eri"+"$1") "alsdf21eri123sfd" $&代表正则内的所有匹配内容。a.replace(/(d+)w+(d+)/,":before:"+"$&"+":after:") "alsdf:before:123dsf21:after:sfd"
obj.trim() #去除空格
var a = " Luotianshuai "undefineda.trimLeft() #去除左边的空格"Luotianshuai "a.trimRight() #去除右边的空格" Luotianshuai"a.trim() //去除两边的空格"Luotianshuai"a" Luotianshuai " #这里可以发现我执行了上面的去除空格的命令之后,实际的值是没有改变的b = a.trim()"Luotianshuai" #但是我们可以通过赋值来改变他b"Luotianshuai"
obj.charAt(index) # 根据索引获取字符串里的字符
b"Luotianshuai"b.charAt(0)"L"b.charAt(1)"u"b.charAt(2)"o"
obj.substring(start,end) #获取字符的子序列,类似于切片
b"Luotianshuai"b.substring(0,3)"Luo"
obj.indexOf(char) #去字符串找指定的字符的索引值是多少
b"Luotianshuai"b.indexof("t")3
obj.length # 获取字符串的长度
b"Luotianshuai"b.length12
3、布尔类型(Boolean)
布尔类型仅包含真假,与Python不同的是其首字母小写。
- == 比较值相等
- != 不等于
- === 比较值和类型相等
- !=== 不等于
- || 或
- && 且
布尔类型;例子测试。
a = 123 b = "123" "123" c = 123 >> typeof a "number" >> typeof b "string" >> typeof c "number" >>a == b true >> a === b false >> a === c true >> a !== b true >> a != b false
5、数组
常用方法:
添加 obj.push(ele) 追加 obj.unshift(ele) 最前插入 obj.splice(index,0,'content') 指定索引插入 移除 obj.pop() 数组尾部获取 obj.shift() 数组头部获取 obj.splice(index,count) 数组指定位置后count个字符 切片 obj.slice(start,end) 合并 newArray = obj1.concat(obj2) 翻转 obj.reverse() 字符串化 obj.join('_') 长度 obj.length
声明一个数组和python中的列表类似
a = [11,22,33,44] #声明一个数组[11, 22, 33, 44]
插入
a = [11,22,33,44] #声明一个数组 [11, 22, 33, 44] a.push(55) #在数组最后增加一个元素 #这里是数组的长度 a [11, 22, 33, 44, 55] a.unshift(00) #在数组最前面增加一个元素 #长度 a [0, 11, 22, 33, 44, 55] a.splice(3,0,'insert') #在指定的索引增加一个元素,括号内(3为索引值,0为固定值,要插入的内容) [] a [0, 11, 22, "insert", 33, 44, 55] a.unshift(100)
移除
切片
a[0, 11, 22, 33, 44] a.slice(1,3) [11, 22] a [0, 11, 22, 33, 44]
合并
a = [11,22] [11, 22] b = [44,55] [44, 55] a.concat(b) [11, 22, 44, 55] a [11, 22] b.concat(a) [44, 55, 11, 22]
反转
a [11, 22] a.reverse() [22, 11] a [22, 11]
字符串格式化
a [22, 11] a.join('_') "22_11" a [22, 11]
数组长度
a [22, 11] a.length 2
6、字典
字典是数组的一种特殊形式
var items = {'k1': 123, 'k2': 'tony'} a = {"k1":"alex",11:22} Object {11: 22, k1: "alex"}a[11] 22 a["k1"] "alex"