3.1、 字符串
在JavaScript中既可以用单引号表示字符串也可以用单引号,没用字符型,字符型就是长度为一的字符串,且字符串与String一样不可变性,(Java中StringBuffer与StringBuilder时可变的),但是在JavaScrpit可以用像数组一样从字符串中取值。
let a = [1,2,3,4,5,6];
a[1] = 2;
a.length() = 6;
a.indexof(2);//返回下标1
a.subString(1);//从下标为1的地方开始返回字符串
a.subString(1,3);//左闭右开,返回2,3子串
==这个符号不区分数据类型,只要数值一样就为true
console.log('1' == 1);//true
局部变量建议都使用let去定义,var相当于定义全局变量。
'use strict'; 严格检查模式,预防JavaScript的随意性导致产生的一些问题。且必须写在Script的第一行。
3.2、 数组
Array可以包含任意的数据结构,柔性数组
var arr = [1,2,3,4,5,6];//通过下标取值和赋值
arr[0];
arr[0] = 1;
var arr = [1,2,3,4,5,6]
1.长度
arr.length
注意:加入给arr.length赋值,数组大小就会发生变化,如果赋值过小,元素就会丢失
2.indexOf(),通过元素获得下标。
arr.lengthOf(2);
1
3.slice() 截取Array的一部分,返回一个新数组,类似于String中的subString
4.push(),pop() 尾部
震惊,这个玩意竟然和用栈一摸一样,后进先出
push():压入到尾部
pop():弹出尾部的一个元素
let arr = [1,2,3,4,5,6,"1","2"];
arr.push("a","b");
arr
arr = [1,2,3,4,5,6,"1","2","a","b"];
arr.pop('b');
arr.pop('a');
arr
arr = [1,2,3,4,5,6,"1","2"];
5.unshift(),shift()头部
震惊,这个东西和队列的用途一摸一样
unshift(): 将元素压入到头部
shift():弹出头部的一个元素
let arr = [1,2,3,4,5,6,"1"];
arr.unshift('a','b');
arr
arr = ['a','b',1,2,3,4,5,6,"1"];
arr.shift('a');
arr = ['b',1,2,3,4,5,6,"1"];
6.排序sort()
7.与Java一样元素反转reverse()
8.concat() 拼接一个数组,并返回新的数组,并不会改变原来的数组
里面输入一个数组,返回的数组会在原数组的基础上尾部增加参数数组的元素
let arr = ["C","B","A"];
let b = arr.concat([1,2,3]);
b = ["C","B","A",1,2,3];
9.连接符join
打印拼接数组,使用特定的字符串连接
arr["C","B","A"];
arr.join('-');
"C-B-A"
10.多维数组
与Java一样
arr[[1,2],[2,3],[5,6]];
3.3、对象
若干个键值对
var 对象名 = {
属性名: 属性值,
属性名: 属性值,
属性名: 属性值,
属性名: 属性值
}
//定义了一个person对象,它有四个属性!
var person = {
name: "kuangshen",
age:3,
email:"24736743@qq.com",
score: 0
}
Js中对象,键值对描述属性,XX: xx,多个属性之间使用逗号,最后一个属性不加逗号!
JavaScript中的所有的键都是字符串,值是任意对象!
1.对象赋值
跟java一样 person.name = "哈哈"
2.使用一个不存在的对象属性,不会报错!会报undefined未定义
例如:person.haha
undifined
3.动态的删减属性,通过delete删除对象的属性
delete person.name;
true
4.动态的添加,直接给新的属性添加值即可
person.haha = "haha";
在person对象中自动新添属性haha
5.判断属性值是否在这个对象中! xx in xx 除了写的那些属性,还继承了许多属性,在prototype里面
'age' in person;
true
//继承
'toString' in person
true
6.判断一个属性是否是这个对象自身拥有的 hasOwnProperty()
person.hasOwnProperty('age');
false
3.4、流程控制
只说与Java不一样的地方
forEach循环
var age = [12,2,13,3,12,3,12,31,23,123];
//里面是一个函数
age.forEach(function(){
console.log(value);
})
for...in
遍历下标
//for(var index in objext){}
for(var num in age){
console.log(age[num]);
}
for...of
遍历元素
1.循环字符串
let string = "abc";
for(let i of string){
console(i);//a,b,c
}
2.循环数组
JavaScript 数组的 keys() 方法返回一个新的数组迭代器对象,该对象包含数组中每个索引的键。
values()方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。
与直接arr一样,都是输出数组元素的值
for(let i of arr){
console.log(i);//一样
}
从数组 arr中创建一个可迭代对象, 该对象包含了数组的键值对:
键是数组下标,值就是数组中元素的值。
3、循环普通对象
4、循环Map接口
5、循环set结构
1、除了字符串,map,set 结构可以直接利用循环出来!
2、对于数组或者对象都需要进行entries() 来进行循环,注意的是对象的entries是静态方法,而对于数组来说是实例方法。
3、为什么循环的时候都是[keys ,values ] 呢? 我们可以用结构赋值来理解,因为map 结构,它本身定义的时候就是 new Map ([[keys,values],[keys,values]]) ,它本身就是[keys ,values ] 的结构,当然可以这样直接循环出来喽!
3.5 Map和Set
Map:
var map = new Map([['tom',100],['jack',90],['haha',80]]);
var name = map.get('tom');
console.log(name);//100
Set:无序不重复的集合
var set = new Set([3,1,1,1,1]);//set可以去重
set.add();//添加
set.delete();//删除
console.log(set.has());//里面是否包含某个元素!