Javascript&字符串类型&数组类型&对象类型(二)

字符串类型,数组类型,对象类型(详讲)


字符串

  1. 正常字符串我们使用 单引号,或者双引号包裹
  2. 注意转义字符\
1
2
3
4
5
\'   代表字符串
\n 换行
\t tab
\u4e2d \u### Unicode字符
\x41 Ascll字符
  1. 多行字符串编写
1
2
3
4
5
6
//  tab上面esc下面
var msg=
'hello
world
你好ya
你好'
  1. 模板字符串 (掌握es6的新特性)
1
2
3
4
5
6
7
//tab上面esc下面
let name = "xm";
let age=3;
let msg= '你好呀,${name}'
console.log(msg)
你好呀,${name}

  1. 字符串长度
1
str.length
  1. 字符串的不可变性(掌握)
1
2
3
4
5
6
console.log(student[0])
s
student[0]=1
1
console.log(student)
student
  1. 大小写转换
1
2
3
4
5
//注意,这里是方法,不是属性
student.toUpperCase() //大写
"STUDENT"
student.toLowerCase() //小写
"student"
  1. 获取指定的下标
1
2
3
4
console.log(student.indexOf('t'))
1
console.log(student.indexOf('s'))
0
  1. substring(掌握)
1
2
3
4
5
[)
student.substring(1) //从第一个字符串截取到最后一个字符串
"tudent"
student.substring(1,3) //[1,3)
"tu"

数组

Array 可以包含任意的数据类型

1
2
3
var  arr = [1,2,3,4,5,6]  //通过下标取值和赋值
arr[0]
arr[0] =1;
  1. 长度
1
arr.length

注意:假如给arr.length,数组大小就会发生变化。如果赋值过小,元素就会丢失。

  1. indexOf,通过元素获得下标索引
    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

如果没有找到匹配的字符串则返回 -1。

1
2
arr.indexOf(2)
1

字符串的”1”和数字1是不同的
3. slice() 截取Array的一部分,返回一个新数组,类似于String中的substring

1
2
arr.slice(3)
[4, 5, 6]
  1. push,pop 尾部(掌握)
1
2
3
4
push:  压入到尾部
pop: 弹出尾部的一个元素
arr.push(1,2,"a")
arr.pop()
  1. unshift(),shift()头部 (掌握)
1
2
unshift  压入到头部
shift 弹出头部的一个元素
  1. 排序 sort()
1
2
3
4
arr
(3["B", "C", "A"]
arr.sort()
(3["A", "B", "C"]
  1. 元素反转 reverse()
1
2
3
(3["A", "B", "C"]
arr.reverse()
(3["C", "B", "A"]
  1. concat() (掌握)
1
2
3
4
5
(3["C", "B", "A"]
arr.concat([1,2,3])
(6["C", "B", "A", 1, 2, 3]
arr
(3["C", "B", "A"]

注意: concat()并没有修改数组,只是会返回一个新的数组

  1. 连接符join
    打印拼接数组,使用特定的字符串连接
1
2
3
(3["C", "B", "A"]
arr.join('-')
"C-B-A"
  1. 多维数组
1
2
3
arr= [[1,2],[3,4],["5","6"]];
arr[1][1]
4

总结: 数组:存储数据(如何存,如何取,方法都可以自己实现!)

对象

是若干个键值对
Js中所有的键都是字符串,值是任意对象!

1
2
3
4
5
6
7
8
9
10
11
12
var 对象名={
属性名: 属性值;
属性名: 属性值;
属性名: 属性值;
}
//定义了一个student对象,它有四个属性!
var student={
name :"zhangsan",
age:10,
email: "24132413241@qq.com",
score: 0
}

Js中对象,{…}表示一个对象,键值对描述属性xxxx:xxxx,多个属性之间使用逗号隔开,最后一个属性不加逗号!

  1. 对象赋值
1
2
3
4
5
6
student.name
"zhangsan"
student.name="lishi"
"lishi"
student.name
"lishi"
  1. 使用一个不存在的对象属性,不会报错! undefined
1
2
student.hahah
undefined
  1. 动态的删减属性,通过delete删除对象的属性
1
2
delete student.name
true
  1. 动态添加,直接给新属性添加值即可
1
2
student.haha= "haha"
"haha"
  1. 判断属性值是否在这个对象中! xx in xxx!
1
2
3
4
5
'age' in student
true
//继承
'toString' in student
true
  1. 判断一个属性是否是这个对象自身拥有的hasOwnProperty()
1
2
3
4
student.hasOwnProperty('toString')
false
student.hasOwnProperty('age')
true

流程控制

  1. if判断 else
  2. while循环 ,避免程序死循环
  3. for循环
  4. forEach循环(5.1引入的)
1
2
3
4
5
var  age=[12,3,12,3,12,3,31,23,123]
//函数
age.forEach(function(value){
console.log(value)
})
  1. for…in(age 不知道是数组大小的情况用)
1
2
3
4
5
6
7
//for(var  index  in object){}
for (var num in age) {
if (age.hasOwnProperty(num)) {
console.log('存在');
console.log(age[num]);
}
}

Map和Set (ES6的新特性)

Map:

1
2
3
4
5
6
7
8
9
10
11
12
13
//ES6   Map
//学生的成绩,学生的名字
// var names =["tom","jack","haha"] ;
// var scores= [100,90,80];
var map = new Map([
['tom', 100],
['jack', 90],
['haha', 80],
]);
var name = map.get('tom');
map.set('admin', 1223456); //添加
console.log(name); //通过Key获得value
map.delete('tom');//删除

Set:无序不重复的集合

1
2
3
4
var set = new Set([1, 3, 1, 1, 1]); //Set可以去重
set.add(2); //添加
set.delete(1); // 删除
console.log(set.has(3)); //是否包含某个元素

iterator(es6新特性)

遍历数组

1
2
3
4
var arr = [3, 4, 5];
for (let x of arr) {
console.log(x);
}

遍历map

1
2
3
4
5
6
7
8
var map = new Map([
['tom', 100],
['jack', 90],
['haha', 70],
]);
for (let x of map) {
console.log(x);
}

遍历set

1
2
3
4
var set = new Set([5, 6, 7]);
for (let x of set) {
console.log(x);
}

参考链接

基于B站视频学习 特别感谢up主 遇见狂神说