JS学习笔记(二)

JavaScript中的对象分为3种:自定义对象内置对象浏览器对象

一、Javascript自定义对象:

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数…

对象中的属性定义不需要var声明

此外,JavaScript 允许自定义对象。

【1】构造对象的几种方法

(1)以构造函数形式来调用
var o= new Object(true);//使用Object生成布尔对象
(2)使用字面量创建
person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};

尝试打印:

console.log(person.firstname);

尝试给person对象添加新属性job:student,并打印验证:

person.job='student';
console.log(person.job);
(3)使用对象构造器构造person
function person(firstname,lastname,age,eyecolor) {

  this.firstname=firstname;

  this.lastname=lastname;

  this.age=age;

  this.eyecolor=eyecolor;

}
//之后用person对象为快速创建新对象服务

var Father=new person('Zhang','baba',47,'brown');

//打印检查效果:

console.log(Father);

var Mather=new person('Chen','mama',47,'brown');

//打印检查效果:

console.log(Mather);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vmLoJIE4-1675229302988)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131160538038.png)]

//为对象添加新属性

Father.job='automobile mechanic';

console.log(Father);

运行结果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAlm8i3x-1675229302989)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131160628401.png)]

【2】将方法添加到JS对象中

方法只不过是附加在对象上的函数。

在构造器函数内部定义对象的方法:

function person(firstname,lastname,age,eyecolor) {
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
    //定义在对象内部的方法,用于修改对象age属性
    this.changeage=function(num){
        this.age=num;
    }

}
//修改对象的属性值

Father.changeage(48);

console.log(Father);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-abCh6dPy-1675229302989)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131161247497.png)]

【3】通过for遍历对象的属性

//通过for遍历对象属性
var txt='';
for(let x in Father){
  txt+=Father[x];
  txt+='||';
}
console.log(txt);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auMgnztf-1675229302990)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131163853824.png)]

(注意:JavaScript的对象是可变的,它不会创建副本)

//对象实例化
var son1=new person('Zhang','yi',21,'brown');

var son2=son1;

console.log('被引用前年龄属性参数:'+son1.age);

son2.age=10;

console.log('被引用后年龄属性参数:'+son1.age);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9Qw0RWW-1675229302990)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131163742169.png)]

细节知识补充:

new关键字的执行过程:

1、new构造函数可以在内存中创建了一个空的对象

2、this就会指向刚才创建的空对象(this的用途)

3、执行构造函数里面的代码给这个空对象添加属性和方法

4、返回这个对象

//对象练手案例:
//创建一个车的对象,该对象要有重量、颜色、牌子,可以载人、拉货和旅游。

function car(weight,color,brand){
    this.weight=weight;
    this.color=color;
    this.brand=brand;
    this.fun1=function(){
        console.log('载人');
    }
    this.fun2=function(){
        console.log('拉货');
    }
    this.fun3=function(){
        console.log('旅游');
    }
}
var BMW1=new car('1.5t','blue','BMW');
var CarInformation='';
for(var key in BMW1){
    CarInformation+=BMW1[key];
    CarInformation+='||';//简单分割,便于查看
}
console.log(CarInformation);
BMW1.fun1();
BMW1.fun2();
BMW1.fun3();

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bUxIMFS8-1675229302991)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131171443912.png)]

二、Javascript内置对象

内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)

例如:Math、Date、Array、String等

【1】Math对象练习:

//案例
var nums=[5,6,8,7,48,67,87,64,78,4,687,68,6];
for(let i=0;i<nums.length;i++){
    for(let j=0;j<nums.length-i-1;j++){
        if(nums[j]>nums[j+1]){
            let temp=nums[j];
            nums[j]=nums[j+1];
            nums[j+1]=temp;
        }
    }
}
console.log(nums);
//找出nums数组里面的最大值
console.log(Math.max(...nums));
var num1=234.234123,num2=-546.5,num3=54.7;
//向下取整
console.log(Math.floor(num1));
//向上取整
console.log(Math.ceil(num1));
//四舍五入
console.log(Math.round(num1));
console.log(Math.round(num2));
console.log(Math.round(num3));

(细节知识,当小数为.5时,结果往大取,包括负数)

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcM4Dvga-1675229302991)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131175936795.png)]

【2】封装一个自定义的数学对象:

//封装一个属于自己的数学对象
var myMath={
    PI:3.1415926,
    max:function(){
        let maxNum=arguments[0];
        for(let i=1;i<arguments.length;i++){
            if(arguments[i]>maxNum){
                maxNum=arguments[i];
            }
        }
        return maxNum;
    },
    min:function(){
        let minNum=arguments[0];
        for(let i=1;i<arguments.length;i++){
            if(arguments[i]<minNum){
                minNum=arguments[i];
            }
        }
        return minNum;
    },
    avg:function(){
        let sum=0;
        for(let i=0;i<arguments.length;i++){
            sum+=arguments[i];
        }
        return sum/arguments.length;
    }
}
console.log('nums数组所有数字的最大数为:'+myMath.max(...nums));
console.log('nums数组所有数字的最小数为:'+myMath.min(...nums));
console.log('nums数组所有数字的平均数为:'+myMath.avg(...nums));

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EWg3XNum-1675229302992)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131175402927.png)]

三、练手案例

【1】案例一、

//数组去除案例
//(1)将旧数组中不重复的元素转存到新数组中
//旧数组
var arr3=['c','a','z','a','x','a','x','c','b'];
//新数组
var arr4=new Array();
for(let i=0;i<arr3.length;i++){
    if(arr3.indexOf(arr3[i])==arr3.lastIndexOf(arr3[i])){
        arr4.push(arr3[i]);
    }
}
console.log(arr4);
//(2)将旧数组中不重复的元素转存到新数组中,重复的元素只保留一个
var arr5=new Array();
for(let i=0;i<arr3.length;i++){
    if(arr5.indexOf(arr3[i])==-1)
        arr5.push(arr3[i]);
}
console.log(arr5);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sjXwDsZP-1675229302992)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131211630403.png)]

【2】案例二、

//查找字符串中元素'w'出现的位置(存储到一个数组中并打印),以及总出现次数
var str='awaeawxdasrawexzewraeeeee';
var indexOfElement=new Array();
var key=0;
//简单直接法
for(let i=0;i<str.length;i++){
    if(str[i]=='w'){
        indexOfElement.push(i);
    }
}
console.log('方法一:元素w出现的位置:'+indexOfElement+'总出现次数:'+indexOfElement.length);
//应用indexOf方法
var indexOfElement2=new Array();
key=str.indexOf('w');
while(key!=-1){
    indexOfElement2.push(key);
    key=str.indexOf('w',key+1);
}
console.log('方法二:元素w出现的位置:'+indexOfElement2+'总出现次数:'+indexOfElement.length);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qb22MQ9V-1675229302992)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131215148078.png)]

【3】案列三、

//查找字符串中出现最多的元素,以及其次数
var str2='awaeawxdseaew2saeaes5555asrawexzewraeeeee';
//技巧1,arr['x']可以判断数组arr中是否存在x元素
var objs={};
for(let i=0;i<str2.length;i++){
    let char=str2.charAt(i);
    if(objs[char]){
        objs[char]++;
    }else{
        objs[char]=1;
    }
}

console.log(objs);
//遍历对象objs,得到出现次数最多的元素
var maxCount=0;
var maxIndex=-1;
//遍历对象需要特别的循环
for(let i in objs){
    if(maxCount<objs[i]){
        maxCount=objs[i];
        maxIndex=i;
    }
}
console.log('出现次数最多的元素:'+maxIndex+',出现次数为'+maxCount);

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0MNj90Rt-1675229302993)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230131222110378.png)]

【3】案列四、

//查询000-01-21是星期几,用字符‘星期x’表示
var date1 = new Date("2000-01-21");
console.log(date1);
//日期格式化
//获取年份
console.log(date1.getFullYear());
//获取星期,注意,直接调用getDay仅获得1到7的整数返回值
arr = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"];
console.log(arr[date1.getDay() - 1]);

请自行验证!

四、数据类型内存分配

【1】数据类型存储位置

简单数据类型会被存储到中,复杂数据类型会被存储到中。

简单数据类型(值类型):string、number、boolean、undefined、null,如age=18;

复杂数据类型,在栈中存放地址,地址指向中开辟的空间。例如array数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值