1,变量定义
//使用严格检查模式
'use strict'
let a =1;
let b= 'string';
let c= "string";
let d =true;
2,数值
**Number 类型:**JS不区分小数和整数,统一为number
tip:
- NaN:not a number 表示不是一个整数NAN
- Infinity:表示无穷大
3,比较运算符
= :赋值运算符
== :等于(类型不一致,但值一直也输出true)
console.log('1'==1)
true
===:只有当类型和值都一致时才输出true
console.log('1'===1)
false
补充:NaN不等于NaN
console.log(NaN===NaN);
false
console.log(isNaN(NaN));
true
4,字符串
-
字符串用单引号或双引号包裹都可以
-
和Java一样存在转义字符(使用方法相同)
-
多行字符串编写(用``包裹)
let s=` 第一行 第二行 `;
-
模板字符串(字符串拼接)
let ss ='world' console.log(`hello ${ss}`);//hello world
-
字符串长度
let ss ='world' console.log(ss.length);//5
-
字符串不可变(和Java的String一样)
let sss="hhh"; >undefined sss[1]=1; >1 sss >"hhh"
-
常用函数
函数名 作用 toUpperCase() 转大写,返回一个全大写的字符串 toLowerCase() 转小写,返回一个全小写的字符串 indexOf() 查询索引,返回索引值 substring(a,b); 返回[a,b)区间内的字符串 substr(a,b) 返回[a,a+b)区间内的字符串
5,数组
-
数组可以包括任意类型的数据
let arr =[1,2,3,true,3.1,"ss"];
-
数组的长度
arr.length
数组的长度可以任意改变的,给arr.length赋值,过小则裁剪,过大则补
let arr =[1,2,3,true,3.1,"ss"]; undefined arr.length 6 arr Array(6) [ 1, 2, 3, true, 3.1, "ss" ] arr.length=10; 10 arr Array(10) [ 1, 2, 3, true, 3.1, "ss", <4 empty slots> ] arr.length=2; 2 arr Array [ 1, 2 ]
-
indexOf
通过元素获得下标索引
var arr2 = [1,2,'1','2']; undefined arr2.indexOf(1) 0 arr2.indexOf('1') 2 arr2[4]="1"; "1" arr2 (5) [1, 2, "1", "2", "1"] arr2.indexOf("1"); 2
1和 '1’严格区分,"1"和’1’相同
-
slice():截取数组的一部分,返回一个新的数组
arr2
>(5) [1, 2, "1", "2", "1"]
arr2.slice(1,2)
>[2]
-
补充常用函数
函数名 作用 shift() 在字符串头部加入一个元素 unshift() 在字符串头部弹出一个元素 push() 在字符串尾部压入一个元素 pop() 在字符串尾部弹出一个元素 revese() 反转字符串 concat() 返回两个数组的连接 join() 利用字符,打印拼接字符串 sort() 排序字符串
6,对象
本质:对象是由若干个键值对组成的,键全部都是字符串,值可以是任意对象
let 对象名 = {
属性名1:属性值,
属性名2:属性值,
属性名3:属性值
};
- 给对象的属性赋值
let person ={
name:'',
age:0
}
person.age=3;
console.log(person.age);//3
- 给一个不存在的属性赋值(不会报错,而是会动态的增加一个属性)
var peoper = { name:""};
>undefined
peoper.hhh=1;
>1
peoper
>{name: "", hhh: 1}
- 动态的删除属性
peoper
>{name: "", hhh: 1}
delete peoper.hhh
>true
peoper
>{name: ""}
- 查询某属性是否在该对象中(包括继承)
此处注意:键全部都是字符串
peoper
{name: ""}
console.log(name in peoper);
1 false
undefined
console.log('name' in peoper);
1 true
- 判断一个属性是否是该对象所独有的(不包括继承)
console.log('toString' in peoper);
1 true
peoper.hasOwnProperty("toString");
false
7,流程结构
此处省略于Java相同的部分
for in 循环
- 可以把一个对象的所有属性显示出来 应用:数组的所有元素的显示(数组的下标其实就是数组这个对象的属性)
//使用严格检查模式
'use strict'
let person ={
name:'haha',
age:18,
sex:'male'
};
for (let personKey in person) {
console.log(personKey);//name age sex
}
let arr=[111,2,1,5,7];
//for each ES5 中操作数组的一种方法,主要功能是遍历数组
//value:遍历的数组内容;index:对应的数组索引,array:数组本身。
arr.forEach(function(value,index,array){
console.log(value);
console.log(index);
console.log(array);
});
//请注意,for ... in对Array的循环得到的是String而不是Number。
for(let arrkey in arr){
console.log(arrkey);//这里获得的是数组的下标
console.log(arr[arrkey]);//获得数组的元素
}
这里要注意一点:for in 打印数组时,不但会打印出数组的每个枚举元素,而且会打印非枚举的元素
//这里个arr数组增加一个属性
arr.name ='hhaha';
for(let arrkey in arr){
console.log(arrkey);//这里获得的是数组的下标
console.log(arr[arrkey]);//获得数组的元素
}
for of
for...of
语句创建一个循环来迭代可迭代的对象(数组,字符串,map ,set),不能用于循环普通对象(必须将其转化为array like 的对象,利用Array.from方法,再者与for in不同,for of 只会遍历出枚举型元素,不会遍历出多余的东西(for each 也不会!)
for(let arrkey of arr){
console.log(arrkey);//这里获得的是数组的元素
}
8,Map 与Set
Map
是一组键值对的结构,具有极快的查找速度。
常用操作:创建,操作键值对,删除键值对
var maps = new Map([['jack',97],['tom',98],['amy',65]]);
//获取值
console.log(maps.get('jack'));
//修改键值对
maps.set('jack',98);
console.log(maps.get('jack'));
//判断是否存在
console.log(maps.has('tom'));
//删除键值对
maps.delete('amy');
console.log(maps.has('amy'));
Set
和Map
类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set
中,没有重复的key。
常用操作:创建,添加,删除
var sets = new Set([1,2,'1']);
//1和 '1'是不同的元素
console.log(sets);
//set增加元素
sets.add(3);
console.log(sets);
//set删减元素
sets.delete('1');
console.log(sets);
iterable
ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型。
具有iterable
类型的集合可以通过新的for ... of
循环来遍历。