JavaScript数据类型
概览
number类型
注意,js不区分小数,整数和Number
123 //整数123
123.1 //浮点数123.1
1.233e3 //负数
NaN //Not a Number 有时候你需要打印判断这个是不是一个数字,它会打印NaN,说明这个不是一个数字
字符串类型
'abc'
"abc"
布尔值类型
true , false
逻辑运算
&& //两个都为真,结果为真
|| //一个为真,结果为真
! //真的为假,假的为真
比较运算,大部分情况用绝对等于
=
== //等于,类型不一样,值一样,判断为true
=== //绝对等于,类型一样,结果一样,判断为true
注意 NaN===NaN 为 false,只能通过isNaN(NaN)判断这个数值是不是true
尽量避免使用浮点数运算,存在精度问题
// 浮点数问题,比如 1/3 === 1-2/3 为false
console.log(1/3 === 1-2/3);//false
我们可以通过绝对值运算判断
console.log(Math.abs(1/3 - (1-2/3)) < 0.00001);//true
null和Undefined
- null 是空
- undefined 是未定义
数组
注意,定义的数组类型可以不是相同的
//定义数组
var arr = [1,2,3,4,5,"hello",null,true];
//取数组
console.log(arr[0]);
取数组,如果越界,就会报错 undefined
对象
注意,对象是大括号,数组是中括号
//Java中定义对象 Person person = new Person(1,2,3,4);
var person = {
name : "nanxi",
age: 5,
tags : ["js","java","web"]
};
console.log(person);

建议每个代码都写严格检查模式
在第一行写"use strict";就进入严格检查模式
"use strict";//严格检查模式,预防JavaScript的随意性导致产生的一些问题
// i = 0;//这个会被定义为全局变量,多个js文件容易出错,设置为严格检查模式就会认为这种语法错误
var i = 0;
字符串类型详解
转义字符
| 代码 | 输出 |
| \' | 单引号 |
| \" | 双引号 |
| \& | 和号 |
| \\ | 反斜杠 |
| \n | 换行符 |
| \r | 回车符 |
| \t | 制表符 |
| \b | 退格符 |
| \f | 换页符 |
多行字符串的编写可以依靠tab键上面的引号
"use strict";
//多行字符串的编写可以依靠tab键上面的引号
var string = `hello
world
你好
`;
【重点掌握1】ES6 新特性,支持,模板字符串,比如在字符串里写${name},注意是`` 不是“”
//ES6 新特性,支持,模板字符串,注意是`` 不是“”
var name = "zhangsan";
var str = `姓名 + ${name}`;
console.log(str);
字符串长度
console.log(str.length);
转换成为大写,注意,这里是方法
console.log(str.toUpperCase());
获取s字符在str字符串的位置
console.log(str.indexOf('s'));
结果是 10
【重点掌握2】String字符串的不可变性
str2 字符串为student
如果更改str2的第二个元素为s,str2字符串并没有发生变化,str2字符串还是student
如果更待str2字符串为book,str2字符串发生变化,str2字符串为book

【重点掌握3】substring方法,编程的时候经常用到
- substring(start: number, end?: number): string;他是包含前面不包含后面
//substring(start: number, end?: number): string;他是包含前面不包含后面
var str2 = "student";
console.log(str2.substring(1));// tudent 从0开始计数,拿到1到最后的代码
console.log(str2.substring(1,3));//tu 从0开始计数,拿到1到3之前的代码,包括前面的1,不包括后面的3
数组类型详解
Array可以包含任意类型的数据

- 注意:slice()是非常常见的截取数组的方式,slice() 可以截取Array的一部分,返回一个新数组,类似于String中的substring
- push()可以在尾部添加元素,pop()是弹出尾部的元素
//定义一个数组,数组是[],
var arr = [1, 2, 3, 4, 5, 6, "1", "2"];
//push()可以在尾部添加元素,pop()是弹出尾部的元素
arr.push("a")
console.log(arr);
弹出结果,发现push("a")将"a"压入尾部

最后还是用这个
这个时间的愚蠢

- unshift()可以在尾部添加元素,shift()是弹出尾部的元素
- 排序 sort()
- 元素翻转 resverse() ,也就是前面的翻转到后面,后面的翻转到前面

数组关注如何存数据,如何取数据,其他方法都可以自己实现
对象
可以理解JavaScript的对象是由若干个键值对组成,格式为
var 对象名 = {
属性名: 属性值,
属性名: 属性值,
属性名: 属性值
}
var car = {type:"Fiat", model:"500", color:"white"};
JavaScript中的所有的键是字符串,值是任意对象


在JavaScript中使用new关键字,就是定义了一个JavaScript对象
var x = new String(); // Declares x as a String object
var y = new Number(); // Declares y as a Number object
var z = new Boolean(); // Declares z as a Boolean object
不建议在对象中定义String, boolean,number 的数据类型,因为会降低程序的运行效率
注意,带()调用的是函数结果,而带()调用函数对象,例如
不带()调用函数对象演示
<p id="demo"></p>
<script>
function toCelsius(f) {
return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius;
</script>
运行结果是

带()调用函数结果演示
<p id="demo"></p>
<script>
function toCelsius(f) {
return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius(90);
</script>

流程控制


for循环中
- 使用使用in打印key的值,
- 使用使用of可以打印value的值,注意,这是ES6的新特性
var arr = ["7","8","9"];
//使用in打印key的值
for (var key in arr){
console.log(key);//0, 1, 2
}
//使用of可以打印value的值,注意,这是ES6的新特性
for(var value of arr){
console.log(value);//7, 8, 9
}
Map和Set(ES6新特性)
"use strict";
//在没有ES6加入的Map之前,我们写一个学生的成绩,学生的姓名,须要用到两个变量,如下
var names = ["tom","jack","haha"];
var scores = [100,90,80];
// 但是这样连表查询麻烦,而且越长越慢,所以ES6加入Map
var map = new Map([["tom",100],["jack",90],["haha",90]]);
console.log(map);
- set()方法是新增或修改
- delete()方法是删除
- has()是否包含某个元素

迭代
//迭代数组
var arr = ["5","6","7","8","9"];
for(var x of arr){
console.log(x);//5, 6, 7, 8, 9
}
//迭代map
var map = new Map([["xiaoming","100"],["wangwei","88"],["lisi","98"]]);
for(var x of map){
console.log(x);//["xiaoming","100"],["wangwei","88"],["lisi","98"]
}
//迭代set
var set = new Set([7,8,9]);
for(var x of set){
console.log(x);//7, 8, 9
}

浙公网安备 33010602011771号