JavaScript对象
遍历对象的属性
通过for…in语法可以遍历一个对象
for(var key in 对象名) {
console.log(key + “==” + 对象名.key);
}
删除对象的属性
function fun() {
this.name = 'mm';
}
var obj = new fun();
console.log(obj.name); // mm
delete obj.name;
console.log(obj.name); // undefined
简单类型和复杂类型的区别
堆栈空间分配区别:
1、栈(操作系统)简单类型:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统)复杂类型: 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
- 注意:JavaScript中没有堆和栈的概念,此处我们用堆和栈来讲解,目的方便理解和方便以后的学习。
内置对象
JavaScript中的对象分为3种:内置对象、浏览器对象、自定义对象
JavaScript 提供多个内置对象:Math/Array/Number/String/Boolean…
对象只是带有属性和方法的特殊数据类型。
学习一个内置对象的使用,只要学会其常用的成员的使用(通过查文档学习)
可以通过MDN/W3C来查询
内置对象的方法很多,我们只需要知道内置对象提供的常用方法,使用的时候查询文档。
MDN
Mozilla 开发者网络(MDN)提供有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。
如何学习一个方法?
- 方法的功能
- 参数的意义和类型
- 返回值意义和类型
- demo进行测试
Math对象
Math.PI // 圆周率
Math.random() // 生成随机数
Math.floor()/Math.ceil() // 向下取整/向上取整
Math.round() // 取整,四舍五入
Math.abs() // 绝对值
Math.max()/Math.min() // 求最大和最小值
Math.sin()/Math.cos() // 正弦/余弦
Math.power()/Math.sqrt() // 求指数次幂/求平方根
Date对象
创建 Date 实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
// 获取当前时间,UTC世界时间,距1970年1月1日(世界标准时间)起的毫秒数
var now = new Date();
console.log(now.valueOf()); // 获取距1970年1月1日(世界标准时间)起的毫秒数
- 日期格式化方法
toString() // 转换成字符串
valueOf() // 获取毫秒值
- 获取日期指定部分
getTime() // 返回毫秒数和valueOf()结果一样,valueOf()内部调用的getTime()
getMilliseconds()
getSeconds() // 返回0-59
getMinutes() // 返回0-59
getHours() // 返回0-23
getDay() // 返回星期几 0周日 6周6
getDate() // 返回当前月的第几天
getMonth() // 返回月份,***从0开始***
getFullYear() //返回4位的年份 如 2016
Array对象
- 创建数组对象的两种方式
// 1. 使用构造函数创建数组对象
// 创建了一个空数组
var arr = new Array();
// 2. 使用字面量创建数组对象
var arr = [1, 2, 3];
- 数组常用方法
// 1 栈操作(先进后出)
push() //向数组元素的最后面插入()里面的
pop() //取出数组中的最后一项,修改length属性
// 2 队列操作(先进先出)
shift() //取出数组中的第一个元素,修改length属性
unshift() //在数组最前面插入项,返回数组的长度
// 3 排序方法
reverse() //翻转数组
数组名.sort(function compare(a, b) {
return a - b;
}) //从小到大排序
数组名.sort(function (a, b) {
return a.length - b.length;
}); //字符串里的个数从小到大排序
// 4 操作方法
concat() //把参数拼接到当前数组
slice() //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
splice() //第一个参数,是从什么位置开始删除 索引。第二个参数,删除多少个元素
// 5 位置方法
indexOf()从前往后找元素、lastIndexOf()从后往前找
//indexOf的第二个参数 设置indexOf查找的开始位置。如果没找到返回-1,找到返回括号里的元素所在的位置。
例子: 找到数组中每一个a出现的位置,并且把所有a换成b
var arr = ['c', 'a', 'z', 'a', 'x', 'a'];
var index = -1;
do {
index = arr.indexOf('a', index + 1);
if (index !== -1) {
console.log(index);
arr = arr.replace('a','b');
}
} while (index !== -1);
// 6 迭代方法 不会修改原数组(可选)
every()、filter()、forEach()、map()、some()
var newArray = arr.filter(function (item) {
// item就是数组中的每一个元素 (item仅仅是一个名字,可变),来筛选
return item < 2000;
})
// 7 方法将数组的所有元素连接到一个字符串中。
join()
- 清空数组
// 方式1 推荐
arr = [];
// 方式2
arr.length = 0;
// 方式3
arr.splice(0, arr.length);
例子: 编写一个方法去掉一个数组的重复元素
// 编写一个方法去掉一个数组的重复元素['c', 'a', 'z', 'a', 'x', 'a']
// ['c', 'a', 'z', 'a', 'x', 'a'] -> ['c', 'a', 'z', 'x']
//
// 1 如何获取数组中每一个元素出现的次数
// 1.1 遍历数组中的每一个元素
// { c: 1
// a: 1 + 1 + 1
// z: 1
// x: 1 }
// 1.2 创建一个对象,把数组的元素作为对象的属性,并记录次数
//
// var o = {};
// console.log(o['c']); // 我们访问对象中没有的属性,返回值是undefined
function clear(arr) {
// 1 如何获取数组中每一个元素出现的次数
var o = {}; // 记录数组中元素出现的次数
for (var i = 0; i < arr.length; i++) {
var item = arr[i]; // 数组中的每一个元素
// o[item] = 1;
// 判断o对象是否有当前遍历到的属性
if (o[item]) {
// 如果o[item] 存在,说明次数不为1
o[item]++;
} else {
// 如果o[item] 不存在,说明是第一次出现
o[item] = 1;
}
}
// console.log(o);
// 2 生成一个新的数组,存储不重复的元素
var newArray = [];
// 遍历对象o中的所有属性
for (var key in o) {
// 判断o对象中当前属性的值是否为 1 如果为1 说明不重复直接放到新数组中
if (o[key] === 1) {
newArray.push(key);
} else {
// o对象中当前属性 次数不为1 ,说明有重复的,如果有重复的话,只存储一次
// 判断当前的newArray数组中是否已经有该元素
if (newArray.indexOf(key) === -1) {
newArray.push(key);
}
}
}
return newArray;
}
var array = ['c', 'a', 'z', 'a', 'x', 'a'];
var newArray = clear(array);
console.log(newArray);
String对象
- 字符串的不可变
var str = 'abc';
str = 'hello';
// 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题,速度可能会比较慢
- 创建字符串对象
var str = new String('Hello World');
- 字符串对象的常用方法
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
// 1 字符方法
charAt(x) //获取指定位置(x+1)处的字符
charCodeAt() //获取指定位置处字符的ASCII码
str[0] //str是字符串的名称,HTML5,IE8+支持 和charAt()等效
// 2 字符串操作方法
substr() //第一个参数,截取的开始位置。第二个参数,截取的长度。
slice() substring()
// 3 位置方法
indexOf() //返回指定内容在元字符串中的位置
lastIndexOf() //从后往前找,只找第一个匹配的
// 4 去除空白
trim() //只能去除字符串前后的空白,如果中间也有空格,可以:**replace()把字符串中的空格换成空字符串,或者使用split()简化**
// 5 大小写转换方法
toUpperCase() //转换大写
toLowerCase() //转换小写
// 6 其它
search() 比indexOf() 强大很多,可以支持正则表达式
replace() 只可以替换第一个找到的元素,可以循环把所有的替换
split() 切割字符串
// String.fromCharCode(101, 102, 103); //把ASCII码转换成字符串
案例
replace()替换,或者使用split()简化。
1.把字符串中的所有空白去掉:
例子:把字符串中的所有空白去掉:
var s = ' abc xyz a 123 ';
var arr = s.split(' ');
console.log(arr.join(''));
//把split(' ')里面的空格 换成 join('')里面的空字符串即可。
//用replace()同理下面的例子, 只是a换成b 变成了 空格换成空字符
例子: 找到数组中每一个a出现的位置,并且把所有a换成b
var arr = ['c', 'a', 'z', 'a', 'x', 'a'];
var index = -1;
do {
index = arr.indexOf('a', index + 1);
if (index !== -1) {
console.log(index);
arr = arr.replace('a','b');
}
} while (index !== -1);
- 判断一个字符串中出现次数最多的字符,统计这个次数:
// 此字符出现的次数 和 出现次数最多的字符
// 1 统计每一个字符出现的次数
var s = 'abcoefoxyozzopp';
var ch; // 此字符出现的次数
var num; // 记录字符串中每一个字符出现的次数
var o = {}; //创建一个对象,字符作为其属性
for (var i = 0; i < s.length; i++) {
var item = s.charAt(i);
if (o[item]) {
o[item]++;// 已经有该属性,+1
} else {
o[item] = 1;// 对象中没有该属性
}
}
console.log(o);
// 2 求最大值 并且找到次数最多的字符
num = 1; // 假设最大值是1
for (var key in o) { //循环遍历对象里的每个字符key
if (num < o[key]) {
num = o[key]; // 最多的次数
ch = key; // 次数最多的字符
}
}
console.log(num);
console.log(ch);
3.获取url中参数
// 获取url中?后面的内容。
var url = 'http://www.itheima.com/login?name=zs&age=18&a=1&b=2';
//最终想要的形式:
// {
// name: 'zs',
// age: 18
// }
// 获取url后面的参数
function getParams(url) {
// 获取? 后面第一个字符的索引
var index = url.indexOf('?') + 1;
// url中?后面的字符串 name=zs&age=18&a=1&b=2
var params = url.substr(index);
// 使用& 切割字符串 ,返回一个数组
var arr = params.split('&');
console.log(arr); //值为["name=zs", "age=18", "a=1", "b=2"]
//创建一个对象
var o = {};
for (var i = 0; i < arr.length; i++) {
var tmpArr = arr[i].split('=');
console.log(tmpArr);//值为["name", "zs"]以及后面的三个
var key = tmpArr[0];
var value = tmpArr[1];
o[key] = value;
}
return o;
}
//用obj接收函数返回的对象o
var obj = getParams(url);
console.log(obj);//值为{name: "zs", age: "18", a: "1", b: "2"}
console.log(obj.name);
console.log(obj.age);
```

浙公网安备 33010602011771号