数据类型(详述)
字符串
请不要把字符串创建为对象,它会拖慢执行速度。new 关键字使代码复杂化。
1.用 ‘ ’ “ ”包裹
2.注意转义字符
\n //新行
\'
\t
\r //回车
\u4e2d //unicode
\x41 //ascii
3.多行字符串编写(用着重号包裹 ``)
var s = `hi
hello wa`;
console.log(s);
4.模板字符串
var name = "www";
var msg = `name:${name}`;//el表达式
console.log(msg);
>name:www
5.字符串长度
var str = "hello";
console.log(str.length);
//下标取值
console.log(str[0]);
>h
str[1] = 'l';//字符串中的值不能改变
>"l"
str
>"hello"
6.常见方法
console.log(str.toUpperCase())//变大写
>HELLO
console.log(str.toLowerCase());//变小写
>hello
console.log(msg);
>name:${name}
console.log(msg.substring(2,4));//截取[2,4)
>me
console.log(msg.indexOf(':'));//找元素首次出现的索引
>4
数组
1.定义
var arr = [1,2,3,4,5];
2.长度
可以改变长度,变长会用undefined填充,变短会丢失;也可以改变数组中的值
console.log(arr.length);
>5
arr.length= 8;//可以改变数组的长度
>8
arr
>Array(8) [ 1, 2, 3, 4, 5, <3 empty slots> ]
arr[7];
>undefined
arr[3] = 33;//可以改变数组的值
>33
arr
>Array(8) [ 1, 2, 3, 33, 5, <3 empty slots> ]
3.二维数组
var arr2=[[1,2,3],['1','2','3'],['hello','hi']];
arr2[2][0];
"hello"
4.常见方法
var arr = [1,2,3,4,5];
console.log(arr.indexOf(3));//找对应元素的下标
>2
console.log(arr.slice(2, 4));//截取相当于substring(2, 4)
>Array [ 3, 4 ]
console.log(arr.push('a','b','c'));//从尾部添加元素
>8
arr;
>Array(8) [ 1, 2, 3, 4, 5, "a", "b", "c" ]
console.log(arr.pop());//从尾部删除元素
>c
console.log(arr.pop());
>b
arr;
>Array(6) [ 1, 2, 3, 4, 5, "a" ]
console.log(arr.unshift('q','w','e'));//从头部添加元素
>9
arr;
>Array(9) [ "q", "w", "e", 1, 2, 3, 4, 5, "a" ]
console.log(arr.shift());//从头部删除元素
>q
arr;
>Array(8) [ "w", "e", 1, 2, 3, 4, 5, "a" ]
console.log(arr.sort()); //排序
>Array(8) [ 1, 2, 3, 4, 5, "a", "e", "w" ]
arr.concat('1');//拼接 会生成新的数组,不会改变原数组,每次拼接基于元数组
.Array(9) [ 1, 2, 3, 4, 5, "a", "e", "w", "1" ]
arr;
>Array(8) [ 1, 2, 3, 4, 5, "a", "e", "w" ]
console.log(arr.join('-'));//连接符 会生成新的数组,不会改变原数组
>1-2-3-4-5-a-e-w
arr;
>Array(8) [ 1, 2, 3, 4, 5, "a", "e", "w" ]
对象
1.定义
属性名都是字符串,属性值可以是任意对象
var 对象名 = {
属性名:属性值,
属性名:属性值,
属性名:属性值
}
var person = {
name:'wj',
age:21,
phone:1234567
}
2.赋值
person.name='wwww';
>"wwww"
person;
>Object { name: "wwww", age: 21, phone: 1234567 }
3.使用一个不存在的属性,不会报错,提示undefined
person.qq;
>undefined
4.删除属性
delete person.name;
>true
person;
>Object { age: 21, phone: 1234567 }
5.添加属性
person.qq='123456';
>"123456"
person;
>Object { age: 21, phone: 1234567, qq: "123456" }
6.判断属性是否在对象中
'qq' in person;
>true
'toString' in person;//'toString'在prototype中
true
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3v5pYz8-1610853023448)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210114203029553.png)]
7.判断自身是否拥有此属性
person.hasOwnProperty('age');
>true
person.hasOwnProperty('toString');
>false
8.js的对象是易变的
x和person是同一个对象
var person = {
name:'wj',
age:21,
phone:1234567
}
var x = person;
x.age=10;
>10
person;
>Object { name: "wj", age: 10, phone: 1234567 }
Map和Set
Map
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Map常用方法
var map = new Map([['Lili',12],['Harry',15],['Jack',34]]);
console.log(map.get('Jack'));//get()
>34
map.set('Lida',22);//set()
>Map(4) { Lili → 12, Harry → 15, Jack → 34, Lida → 22 }
map.delete('Lili');//删除
var map = new Map([['Lili',12],['Harry',15],['Jack',34]]);
var arr = Array.from(map);//将Map转为Array
arr;
>Array(3) [ (2) […], (2) […], (2) […] ]
Map遍历for…of
for(let[key,val] of map){//for...of遍历
console.log(key+":"+val);
}
>Lili:12
>Harry:15
>Jack:34
>Lida:22
for(let[key,val] of map.entries()){//这个 entries 方法返回一个新的 Iterator 对象
console.log(key+":"+val);
}
for(let key of map.keys()){//遍历key(也可以是value)
console.log(key);
}
map.forEach(function(key,value){//forEach遍历
console.log(key+":"+value);
})
>12:Lili
>15:Harry
>34:Jack
>22:Lida
Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Set遍历for…of
var set = new Set([1,2,3,4,4,4]);
for(let x of set){
console.log(x);
}
Set常用方法
var set = new Set([1,2,3,4,4,4]);
console.log(set);
>Set(4) [ 1, 2, 3, 4 ]//会去重
set.add('aaa');
>Set(5) [ 1, 2, 3, 4, "aaa" ]//添加
set.delete(4);//删除
>true
set;
>Set(4) [ 1, 2, 3, "aaa" ]
set.has(1);//是否包含
>true
如有不对的地方欢迎大家指出,共同进步!