JavaScript入门到精通(五)

本文介绍了JavaScript中的对象基础,包括对象的创建、属性操作、属性名和属性值,以及基本和引用数据类型的差异。此外,还讲解了函数的创建、参数、返回值以及对象字面量的使用。通过示例展示了如何在JavaScript中操作对象和使用函数。
摘要由CSDN通过智能技术生成

什么,听说你还没有对象,没关系,学好了对象,咱创建一个呀!

41. 对象的简介

JS基本数据类型:String,Number,Boolean,Null,Undifined表示的值和值之间没有任何的联系的

如果在JS中表示一个人的信息(name, gender, age),需要定义三个变量,而它们之间是相互独立的,不能成为一个整体

因此引入对象数据类型,来保存多个不同数据类型的属性,使之成为整体

对象的分类:
内建对象:由ES标准中定义的对象,在任何ES的实现中都可以使用>
例如:Math,String,Number,Boolean,Function Object …

宿主对象:由JS的运行环境提供的对象,目前来讲主要由浏览器提供的对象
例如:BOM,DOM

自定义对象:由开发人员自己创建的对象

42. 对象的基本操作

创建对象:var obj = new Object( );

使用new关键字调用的函数,是构造函数constructor
构造函数是专门用来创建对象的函数
使用typeof检查一个对象时,会返回object

下面实现对象的增删改查操作:

向对象添加属性
语法:对象.属性名 = 属性值

删除对象的数学值
语法:delete 对象.属性名

修改对象的属性值
语法:对象.属性名 = 属性值

读取对象中的属性
语法:对象.属性名
如果读取对象中不存在的属性,则不会报错而是返回undifined

var obj = new Object();

obj.name = "孙悟空";
obj.gender = "男";
obj.age = 18;

console.log(obj); //打印对象
console.log(obj.name);//查询对象name的属性值
console.log(obj.school);//查询对象中不存在属性

obj.name = "JERRY";//修改对象name的属性值
delete obj.name;//删除对象的name属性
console.log(obj);

在这里插入图片描述

43. 对象的属性名和属性值

对象的属性名不强制要求遵循标识符的规则,什么名字都可以取,但建议遵循规范

如果采取特殊的属性名,不能采用对象.属性名的方式,应使用对象[“属性名”]=属性值的方式。向中括号内传递一个变量,这种形式操作属性更加灵活

对象的属性值可以是任意的数据类型

可以通过in运算符来检查一个对象中是否含有指定的属性,如果有返回true,没有返回false

语法:”属性名” in 对象

var obj = new Object();

obj.var = "孙悟空";//对象属性名不遵循规则不报错

obj["123"] = 789;//特殊属性名应采取[]方式
console.log(obj);

var n = "123";//定义一个变量灵活操作属性
console.log(obj[n]);

obj.test = "hello";//属性值为String类型
obj.test1 = null;//属性值为null类型
obj.test2 = undefined;//属性值为undifined类型

var obj2 = new Object();
obj2.name = "猪八戒";
obj2.age = 20;
console.log(obj);

console.log("test3" in obj); //检查对象中是否含有某属性
console.log("test2" in obj);

在这里插入图片描述

44. 基本和引用数据类型

  • JS中变量是保存在栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量的值不会影响其它变量的值
  • JS中对象是保存在堆内存中的,每创建一个对象,开辟出一个新空间,而变量保存的是对象的内存地址(对象的引用)

如果两个变量保存的是同一对象的引用,当改变一个对象的属性另一个也会受到影响

当比较两个基本数据类型时,就是比较值
当比较两个对象类型时,就是比较内存地址

两对象虽然值一样但地址不一样

var a = 123;
var b = a;
a++;
console.log("a="+a);//变量a增加了1
console.log("b="+b);//变量b的值不变

var obj1 = new Object();
obj1.name = "孙悟空";
var obj2 = new Object();
obj2 = obj1;
console.log(obj1);//对象obj1的name为孙悟空
console.log(obj2);//对象obj2的name为孙悟空
obj1.name = "猪八戒"; 
console.log(obj1);//修改obj1的name为猪八戒
console.log(obj2);//对象obj2的name改变为猪八戒

obj2 = null;//改变obj2为null
console.log(obj1);//obj1不变
console.log(obj2);//obj2为null

var obj3 = new Object();
var obj4 = new Object();
obj3.name = "TOM";
obj4.name = "TOM";
console.log(obj3==obj4)//两对象地址不同则不相等

在这里插入图片描述

45. 对象字面量

使用对象字面量来创建一个对象,var obj = { };

使用字面量可以在创建对象时,直接指定对象中的属性

语法:{属性名:属性值,属性名:属性值…}

对象字面量的属性名可以加引号也可以不加,建议不加
如果要使用一些特殊的名字,则必须加引号

属性名和属性值是一组一组的名值对结构
名和值之间使用冒号连接,多个名值对之间用逗号隔开
如果最后一个属性之后没有其它属性了,就不要加逗号了,避免浏览器出错

var obj = {
    name : "Tom",
    age : 28,
    gender : "男",
    test : {name :"唐僧"}
}
console.log(obj);

在这里插入图片描述

46. 函数的简介

函数也是一个对象
函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)

创建函数对象:
方式一:构造函数
语法:函数对象( ) 如: var fun = new Function( );
可以将要封装的代码以字符串的形式传递给构造函数
封装到函数中的代码不会立即执行,在调用时按顺序执行代码
实际开发中很少使用构造函数来创建一个对象

方式二:函数声明
语法:function 函数名([形参1,形参2…,形参n]){语句… }
如:function fun( ){ 语句…}
封装到函数中的代码不会立即执行,在调用时按顺序执行代码

方式三:函数表达式
语法:var 函数名 = function([形参1,形参2…,形参n]){语句… };
如:var fun = function([形参1,形参2…,形参n]){语句… };

var fun1 = new Function("console.log('Hello!第一种方式')");
fun1();

function fun2(){
    console.log(('Hello!第二种方式'))
}
fun2();

var fun3 = function(){
    console.log(('Hello!第三种方式'))
};//赋值语句,注意分号
fun3();

在这里插入图片描述

【注意】第一种方式和第三种方式末尾有分号

47. 函数的参数

可以在函数的()中指定一个或多个形参(形式参数)

多个形参之间使用逗号隔开,声明形参相当于在函数内部声明了对应的变量

在调用函数时,可以在()内指定实参(实际参数),实参将赋值给函数中对应的形参

调用函数时解析器不会检查实参的类型,所以要注意是否有可能接收到非法的参数
调用函数时不会检查实参的数量
多余实参不会被赋值
如果实参的数量少于形参的数量,则没有对应实参的形参将会是undifined

function sum(a,b){
    console.log(a+b);
}

sum(1,2);

sum(1," hello");
sum(true,1);//

sum(1,2,3);//多余实参

sum(1);//缺少实参

在这里插入图片描述

48. 函数的返回值

return后的值就是函数的执行结果,可以定义一个变量来接收结果

在函数return后的语句都不会执行
如果return语句后不跟任何值就相当于返回一个undifined
如果函数中不写return,则也会返回undifined

function sum1(a,b,c){
    var d = a + b + c;
    return d;
    console.log(123);//不会执行
}
var e = sum1(1,2,3);
console.log(e);

function sum2(a,b,c){
    var d = a + b + c;
    return;//return不跟任何值
}
var f = sum2(1,2,3);
console.log(f);

function sum3(a,b,c){
    var d = a + b + c;
    //不写return
}
var g = sum3(1,2,3);
console.log(g);

在这里插入图片描述

49. 实参

问题1:定义一个函数,判断一个数字是否为偶数,如果是返回true,否则返回false

问题2:定义一个函数,根据半径求圆的面积

问题3:定义一个函数,可以从控制台中输出一个人的信息

实参可以是任意的数据类型,也可以是一个对象,当参数过多时,可以考虑将参数封装到对象中进行传递
实参也可以是函数,注意传递fun和fun( )的区别

function isOu(num){
    return num % 2 == 0; 
}

var result = isOu(99);
console.log(result);

function mainji(r){
    return 3.14*r*r;
}
result = mainji(5);
console.log(result);

function sayHello(o){
    console.log("我是"+o.name+",今年我"+o.age+"岁了,"+"我是一个"+o.gender+"人"+",我住在"+o.address);
}
var obj = {
    name : "孙悟空",
    age : 18,
    gender : "男",
    address : "花果山"
}
sayHello(obj);//实参为对象

function fun(a){
    console.log(a);
} 

fun(function(){console.log("我是匿名对象")});
fun(mainji);//实参为函数对象
fun(mainji(1));//实参为调用函数,相当于使用函数的返回值


在这里插入图片描述

50. 返回值的类型

return可以结束整个函数
break可以退出当前循环
continue可以结束当次循环

返回值可以是任何的数据类型,可以为一个对象或函数

function fun1(){
    for(var i=0;i<5;i++){
        if(i==2){
            return ;
            // break;
            // continue;
        }
        console.log(i)
    }
}
fun1();

function fun2(){
    return {name:"Tom"};//返回值可以是对象
}
var a = fun2();
console.log(a.name);

function fun3(){
    function fun4(){
        console.log("我是fun4")
    }
    return fun4;//返回值可以是函数对象
}
a = fun3();
a();//定义变量a为fun3()再调用,此句相当于fun4()

fun3()();//没有另外定义变量

在这里插入图片描述

【注意】如果直接调用fun4( ),可以发现是报错的,提示你fun4函数没有定义。因为fun4函数是声明在fun3函数里面的,没有在外面显示声明,只能通过fun3函数来调用fun4函数

在这里插入图片描述

下一章节将对对象进行更加深入的了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值