自学JavaScript - day 2
JavaScript
字符串
字符串的表示
使用''
或""
括起来的字符为字符串
字符串本身包含'
或"
则需要使用转义字符\
,例如I'm "ok"
写为:
'I\'m \"ok\"';
ASCII字符的表示
ASCII字符可以用\x##
的十六进制表示,如'A'
可表示为:
'\x41'; //完全等同于'A'
Unicode字符的表示
Unicode字符可以用\u####
表示,如'中文'
可表示为:
'\u4e2d\u6587'; //完全等同于'中文'
多行字符串的表示
-
每行结束使用
'\n'
-
ES6标准新增了一种方法,用反引号表示:
`wait for 131 `;
对字符串的操作
字符串拼接
- 使用
+
:
缺点:连接大量字符串较麻烦var name='131'; var days='21'; var s='wait for '+name+' - day '+days;
- 使用ES6新增的一种模板字符串:
var name='131'; var days='21'; var s=`wait for ${name} - day ${days}`;
字符串的长度
var s='Hello World';
s.length; //字符串长度为11
获取字符串指定位置的字符
使用类似Array的下标操作,索引从0开始:
var s='Hello World';
s[0]; //'H'
s[10]; //'d'
s[11]; //undefined
字符串不可变,所以对某个索引赋值,字符串不会发生变化,如:
var s='Hello World';
s[0]='a'; //s依旧为'Hello World'
JavaScript为字符串提供的一些常用方法
调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串
toUpperCase
把字符串全变为大写
var s='Defg';
var temp=s.toUpperCase(); //返回'DEFG'并赋值给变量'temp'
toLowerCase
把字符串全变为小写
var s='Defg';
s.toLowerCase(); //返回'defg'并赋值给变量'temp'
indexOf
指定字符串第一次出现的位置
var s='Defg abcd';
s.indexOf('abcd'); //返回5,没找到返回-1
substring
返回指定索引区的字串
var s='Defg';
s.substring(0,2); //返回'De'
s.substring(2); //返回'fg',从索引2开始到最后
sclice()
用于数组中选出指定元素
var s=[0,'1',2,'3'];
s.slice(0,2); //返回 0,'1'
s.slice(2); //返回 2,'3',从索引2开始到最后
因为字符串也是一种数组,所以字符串也可以用slice()
数组
对数组的操作
数组的长度
var a=[1,2.1,'a',true,null];
a.length; //获得数组长度,5
//直接给数组的length赋值会改变数组中元素的个数
a.length=6; //变为:a=[1,2.1,'a',true,null,undefined]
a.length=2; //变为:a=[1,2.1]
改变数组中的值
var a=[1,2.1,'a',true,null];
a[1]=131; //变为:a=[1,131,'a',true,null]
//通过索引赋值时,索引超出范围,也会引起数组大小变化
a[6]=111; //变为:a=[1,131,'a',true,null,undefined,111]
indexOf
找出指定元素的位置
var a=[1,2.1,'a',true,null];
a.indexOf(1); //元素1的索引为0,没找到返回-1
slice
对应字符串的substring()
slice(start,end)
start 必须,end 可选
var a=[1,2.1,'a',true,null];
a.slice(0,2); //[1,2.1]
a.slice(3); //[true,null]
slice()
即不传递参数,则会截取所有元素,可以用于复制数组
var a=[1,2.1,'a',true,null];
var b=a.slice(); //数组a中元素和数组b中元素相同
a===b; //false
push和pop
push()
:向数组末尾添加若干元素
pop()
: 删除最后一个元素
var a=[1,2.1,'a',true,null];
a.push(1,2); //返回数组新长度7,变为:a=[1,2.1,'a',true,null,1,2];
a.pop(); //返回数组最后一个值:2,变为:a=[1,2.1,'a',true,null,1];
unshift和shift
unshift()
:向数组头部添加若干元素
shift()
: 删除第一个元素
var a=[1,2.1,'a',true,null];
a.unshift(1,2); //返回数组新长度7,变为:a=[1,2,1,2.1,'a',true,null];
a.shift(); //返回数组最后一个值:1,变为:a=[2,1,2.1,'a',true,null];
sort
对数组排序,原数组改变
var a=['B','C','A'];
a.sort(); //变为:a=['A','B','C']
reverse
数组反转
var a=['B','C','A'];
a.reverse(); //变为:a=['A','C','B']
splice
var a=[1,2,3,4,5];
//从索引1开始删除2个元素,并添加2个元素
a.splice(1,2,3,1); //返回删除元素[2,3],并在删除位置添加元素[3,1],则a变为[1,3,1,4,5]
//只删除
a.splice(2); //返回删除元素[1,4,5],则a变为[1,3]
//只填加
a.splice(2,0,1); //返回[],无删除元素,则a变为[1,3,1]
concat
数组连接,并返回一个新的数组,原数组不进行修改
var a=[1,2,3];
var b=a.concat(['a','b','c']); //b=[1,2,3,'A','B','C'];
contact()可以接受任意个元素和数组,对于数组,它会把数组拆开,然后全部添加到新数组中
var a=[1,2,3];
a.contact(1,2,[3,4]); //[1,2,3,1,2,3,4]
join
把数组中的每个元素用指定元素连接起来,然后返回连接后的字符串
var a=['a','b','c',1,2,3]
a.join('-'); //'a-b-c-1-2-3'
//如果元素不是字符串,则会自动转换成字符串后再连接
多维数组
var a=[[1,2,3],[4,5,6],'+'];
//数组a包含3个元素
//利用索引取到 5
console.log(arr[1][1]);
对象
描述
var person={
name:"Bobby",
birth:1995,
'month-date':'12-21'
};
最后一个属性后面无,
如果属性名包含特殊字符,必须用''
括起来
访问
//一般属性
person.name; //'Bobby'
person['name']; //'Bobby'
//含特殊字符的属性
person['month-date'];
//访问不存在的属性,会返回undefined
//打印出所有属性:值
for(var temp in person){
console.log(temp+':'+person[temp]);
}
添加删除属性
var person={
name:"Bobby"
'month-date':'12-21'
};
//新增birth属性
person.birth=1995;
//删除birth属性
delete person.birth; //也可以delete person['birth'];
//删除一个不存在的属性也不会报错
查找属性是否存在
var person={
name:"Bobby",
birth:1995,
'month-date':'12-21'
};
'name' in person; //true
in
判断的属性如果是对象继承来的,也会返回true
'toString' in person; //true
//toString 定义在object对象中,而所有对象最终都会在原型链上指向object,所以person也拥有toString属性
//要判断一个属性是否是person自身拥有的,而不是继承得到的,可以用如下方法
person.hasOwnProperty('name'); //true
person.hasOwnProperty('toString'); //false