文章目录
- 1. 对象
- 创建对象的三种方式
- new关键字
- 遍历对象属性
- 2. JS内置对象
- 2.1查文档
- 2.2Math对象
- 随机数
- 2.3日期对象
- Date 使用
- 日期格式化
- 获取日期的总的毫秒形式
- 倒计时秒杀案例
- 2.4数组对象
- 检测是否是数组
- 添加删除数组元素的方法
- 数组排序
- 数组索引方法
- 数组去重案例
- 数组转换为字符串
- 2.5字符串对象
- 基本包装类型
- 字符串的不可变
- 根据字符返回位置
- 根据位置返回字符(重点)
- 字符串操作方法(重点)
- replace()方法
- split()方法
- 简单类型与复杂类型
- 堆和栈
- 简单类型传参
- 复杂类型传参
1. 对象
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的。
1.属性:事物的特征,在对象中用属性来表示(常用名词)
2.方法:事物的行为,在对象中用方法来表示(常用动词)
保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组。如果要保存一个人的完整信息就用对象
创建对象的三种方式
1. 字面量创建对象
var star = {name : 'pink',age : 18,sex : '男',sayHi : function(){alert('大家好啊~');}
};
//变量、属性、函数、方法的区别
1.变量和属性的相同的他们都是用来存储数据的
var num=10;
var obj={age:18,fn:function(){}
function fn(){}//在外面的叫函数,在里面的叫方法
console.log(obj.age);
//console.10g(age);×变量单独声明并赋值使用的时候直接写变量名单独存在属性在对象里面的不需要声明的使用的时候必须是对象。属性
2.函数和方法的相同点都是实现某种功能做某件事
//函数是单独声明 并且调用的,函数名() 单独存在
//方法 在对象里面 调用的时候 对象.方法()
2. new Object 创建对象
跟我们前面学的 new Array() 原理一致
var andy = new Obect();
andy.name = 'pink';
andy.age = 18;
andy.sex = '男';
andy.sayHi = function(){alert('大家好啊~');
}
Object() :第一个字母大写
new Object() :
需要 new 关键字 使用的格式:对象.属性 = 值;
3. 构造函数创建对象
function Person(name, age, sex) {this.name = name;this.age = age;this.sex = sex;this.sayHi = function() {alert('我的名字叫:' + this.name + ',年龄:' + this.age + ',性别:' + this.sex);}
}
var bigbai = new Person('大白', 100, '男');
var smallbai = new Person('小白', 21, '男');
console.log(bigbai.name);
console.log(smallbai.name);
- 构造函数,如 Stars(),抽象了对象的公共部分,封装到了函数里面,它泛指某一大类(class) 创建对象,如 new
- Stars(),特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化
new关键字
遍历对象属性
for…in 语句用于对数组或者对象的属性进行循环操作。
for (变量 in 对象名字) {// 在此执行代码
}
语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为 k 或者 key。
for (var k in obj) {console.log(k); // 这里的 k 是属性名console.log(obj[k]); // 这里的 obj[k] 是属性值
}
2. JS内置对象
2.1查文档
MDN: https://developer.mozilla.org/zh-CN/
1.查阅该方法的功能
2.查看里面参数的意义和类型
3.查看返回值的意义和类型
4.通过 demo 进行测试
2.2Math对象
Math 对象不是构造函数,不需要new来调用,直接使用属性和方法,跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员。
Math.PI
console.log(Math.PI);// 圆周率
Math.floor() // 向下取整,舍去小数部分
Math.ceil() // 向上取整,小数部分全进一
Math.round() // 四舍五入版 就近取整 注意 -3.5 结果是 -3
Math.abs() // 绝对值
Math.max()/Math.min() // 求最大和最小值
注意:上面的方法必须带括号
//封装数学对象案例var myMath={PI: 3.14927834625,max: function(){var max=arguments[0];for(var i=1;i<arguments.length;i++){max>arguments[i]?max=max:max=arguments[i]}return max;},min: function(){var min=arguments[0];for(var i=1;i<arguments.length;i++){min<arguments[i]?min=min:min=arguments[i]}return min;}}console.log(myMath.PI);console.log(myMath.max(12,23,1,6,90));console.log(myMath.min(12,23,1,6,90));
随机数
random() 方法可以随机返回一个小数,其取值范围是 [0,1),左闭右开 0 <= x < 1
得到一个两数之间的随机整数,包括两个数在内
生成随机数
function getRandom(min, max) {return Math.floor(Math.random() * (max - min + 1)) + min;
}
、、随机点名
var arr=['张三','张三丰','张三丰在','李四']console.log(arr[getRandom(0,arr.length-1)]);
2.3日期对象
Date 使用
Date 对象和 Math 对象不一样,他是一个构造函数,所以我们需要实例化后才能使用, Date 实例用来处理日期和时间
日期格式化
获取日期的总的毫秒形式
Date 对象是基于1970年1月1日(世界标准时间)起的毫秒数
用总的毫秒数来计算时间更精确
// 实例化Date对象
var now = new Date();
// 1. 用于获取对象的原始值,现在的时间距离1970.1.1的总毫秒数
console.log(date.valueOf())
console.log(date.getTime())
// 2. 简单写可以这么做
var now = + new Date();
// 3. HTML5中提供的方法,有兼容性问题
var now = Date.now();
倒计时秒杀案例
//倒计时秒杀案例function countDown(time){var nowTime=+new Date();var endTime=+new Date(time);var times=(endTime-nowTime)/1000;//秒杀结束距离现在剩余的秒数var s=parseInt(times%60);s<0?'0'+s:s;var min=parseInt(times/60%60);min<0?'0'+min:min;var hour=parseInt(times/60/60%24);hour<0?'0'+hour:hour;var day=parseInt(times/24/60/60);day<0?'0'+day:day;return day+'天'+hour+'时'+min+'分'+s+'秒';}console.log(countDown("2024-3-8 16:00:00"));var date =new Date();console.log(date);
2.4数组对象
创建数组对象的两种方式:
1.字面量方式
var arr = [1,2,3];
2.new Array()
var arr1 = new Array(2);//2表示数组长度为2,里面有两个空的数组元素
var arr1 = new Array(2,3);//2,3表示[2,3]
检测是否是数组
添加删除数组元素的方法
//删除工资超过2000的var arr=[1500,1200,2000,2100,1800];var newArr =[];for (var i=0;i<arr.length;i++){if(arr[i]<2000){newArr.push(arr[i]);}}console.log(newArr);
数组排序
//数组排序{冒泡}var arr1 = [13,4,77,1,7];arr.sort(function(a,b){return a-b;//升序//return b-a;降序});console.log(arr1);
数组索引方法
数组去重案例
var arr1=['z','a','c','a','x','a','a','z','a','a'];function unique(arr){var newArr =[];for (var i=0;i<arr.length;i++){if (newArr.indexOf(arr[i])===-1){newArr.push(arr[i]);}}return newArr;}console.log(unique(arr1));
数组转换为字符串
var arr1=['green','blue','pink'];console.log(arr1.toString());//green,blue,pinkconsole.log(arr1.join());//green,blue,pinkconsole.log(arr1.join('-'));//green-blue-pink
2.5字符串对象
基本包装类型
字符串的不可变
根据字符返回位置
var arr=['red','green','blue','pink','red','red'];var num=0;var index=arr.indexOf('red');while(index!==-1){console.log(index);num++;index =arr.indexOf('red',index+1);}console.log("red出现的次数为:"+num);
根据位置返回字符(重点)
有一个对象,来判断是否有该属性:对象[‘属性名’];
var o={
age=19;}
if(0['sex']){
console.log('里面有该属性')}
var str="oqqqqqqqoioooooopqxbafgdskjjoohj";var o={};for(var i=0;i<str.length;i++){var chars=str.charAt(i);if(o[chars]){//o[chars]得到的是属性值o[chars]++;}else{o[chars]=1;}}console.log(o);var max=0;var ch='';for (var k in o){//k是属性名if (o[k]>max){//o[k]得到的是属性值max = o[k];ch = k;}}console.log('最多的字符是:'+ch+'\n'+'有'+max+'个');
字符串操作方法(重点)
replace()方法
replace() 方法用于在字符串中用一些字符替换另一些字符。
replace(被替换的字符串, 要替换为的字符串);
split()方法
split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组
var str = 'a,b,c,d';
console.log(str.split(',')); // 返回的是一个数组 [a, b, c, d]
toUpperCase() //转换大写
toLowerCase() //转换小写