JS基础笔记

来源:互联网 发布:淘宝客内部卷网站源码 编辑:程序博客网 时间:2024/05/22 16:25

js的对象定义

var person = {
name: ‘Bob’,
age: 20,
tags: [‘js’, ‘web’, ‘mobile’],
city: ‘Beijing’,
hasCar: true,
zipcode: null
};

在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,
将造成变量i互相影响,产生难以调试的错误结果。

strict模式
在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。
启用strict模式的方法是在JavaScript代码的第一行写上:
‘use strict’;

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\
由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ... 表示:
这是一个
多行
字符串
;
注意:反引号在键盘的ESC下方,数字键1的左边

需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果

字符串的一些常用方法:
toUpperCase()把一个字符串全部变为大写
toLowerCase()把一个字符串全部变为小写
indexOf()会搜索指定字符串出现的位置
substring()返回指定索引区间的子串

数组
请注意,直接给Array的length赋一个新的值会导致Array大小的变化
请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化
Array也可以通过indexOf()来搜索一个指定的元素的位置
slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array
注意到slice()的起止参数包括开始索引,不包括结束索引
如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array
arr.slice(3); // 从索引3开始到结束
push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉
如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉
sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序
reverse()把整个Array的元素给掉个个,也就是反转

splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

var arr = [‘Microsoft’, ‘Apple’, ‘Yahoo’, ‘AOL’, ‘Excite’, ‘Oracle’];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, ‘Google’, ‘Facebook’); // 返回删除的元素 [‘Yahoo’, ‘AOL’, ‘Excite’]
arr; // [‘Microsoft’, ‘Apple’, ‘Google’, ‘Facebook’, ‘Oracle’]
// 只删除,不添加:
arr.splice(2, 2); // [‘Google’, ‘Facebook’]
arr; // [‘Microsoft’, ‘Apple’, ‘Oracle’]
// 只添加,不删除:
arr.splice(2, 0, ‘Google’, ‘Facebook’); // 返回[],因为没有删除任何元素
arr; // [‘Microsoft’, ‘Apple’, ‘Google’, ‘Facebook’, ‘Oracle’]

concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array
请注意,concat()方法并没有修改当前Array,而是返回了一个新的Array
join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

对象
var xiaoming = {
name: ‘小明’,
birth: 1990,
school: ‘No.1 Middle School’,
height: 1.70,
weight: 65,
score: null
}
JavaScript用一个{…}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,
如果加了,有的浏览器(如低版本的IE)将报错。
访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用”括起来
xiaohong的属性名middle-school不是一个有效的变量,就需要用”括起来。访问这个属性也无法使用.操作符,必须用[‘xxx’]来访问
由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性

xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性

如果我们要检测xiaoming是否拥有某一属性,可以用in操作符(’name’ in xiaoming; // true)
不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的
因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法

var a = [‘A’, ‘B’, ‘C’];
for (var i in a) {
alert(i); // ‘0’, ‘1’, ‘2’
alert(a[i]); // ‘A’, ‘B’, ‘C’
}
请注意,for … in对Array的循环得到的是String而不是Number

Map
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉

Set
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key
重复元素在Set中自动被过滤
通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果
通过delete(key)方法可以删除元素

iterable
for … of循环则完全修复了for in问题,它只循环集合本身的元素。更好的方式是直接使用iterable内置的forEach方法,
它接收一个函数,每次迭代就自动回调该函数

定义函数
function abs(x) {
if (typeof x !== ‘number’) {
throw ‘Not a number’;
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。
arguments类似Array但它不是一个Array
利用arguments,你可以获得调用者传入的所有参数。也就是说,即使函数不定义任何参数,还是可以拿到参数的值
rest参数只能写在最后,前面用…标识,从运行结果可知,传入的参数先绑定a、b,
多余的参数以数组形式交给变量rest,所以,不再需要arguments我们就获取了全部参数

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的
关键字let,用let替代var可以申明一个块级作用域的变量
ES6标准引入了新的关键字const来定义常量,const与let都具有块级作用域

原创粉丝点击