javascript对象和函数

本文深入探讨JavaScript中的函数和对象。函数作为可重复使用的代码块,分为声明式和表达式两种方式,具有不同类型的参数和返回值。函数提升和作用域是其重要特性。对象是无序数据集合,由键值对构成,可以包含方法。对象的创建、属性读写、操作及引用都有详细阐述,同时介绍了与对象相关的各种内置方法。
摘要由CSDN通过智能技术生成

大纲

  1. javascript对象
  2. javascript函数

javascript函数

官方:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
个人:函数是一组拥有某些特定功能的、能够被重复调用的、闭合的代码块。

在函数外部并不关心函数里面有什么,只关心函数能做什么。
在函数内部并不关心函数外部有什么,只关心要怎么做。

function 函数名(函数参数1,函数参数2...){
    函数内容语句/函数体
}

函数可以没有参数
函数名的命名规则符合变量的命名规则

函数的声明

  1. [function命令]
function 函数名(参数1,参数2...){
    函数体;
}

可以通过调用函数名来调用函数。
2. [函数表达式]

var 变量 = function(参数1,参数2...){
    函数体;
}

通过访问变量来调用函数。
3.[Function构造函数]

var 变量 = new Function();
}

这种声明函数的方式非常不直观,几乎无人使用。

函数的调用

只要函数已经被声明,直接写出函数名和函数参数即可调用函数。

多次重复声明同名的函数会造成的结果是:后声明的函数会覆盖先声明的函数。
对于javascript来说,把函数调用写在函数声明之前也是被允许的,因为javascript存在一个隐式的函数提升。

函数的类型

  1. 无参无返回值
  2. 无参有返回值
  3. 有参无返回值
  4. 有参有返回值

返回值:[函数执行结束后]返回到[原本程序中函数所在的位置],用来替代整个函数的[结果],被称为函数的返回值。通常使用return关键词来实现。
形式参数:函数在定义的时候写在小括号中的参数被称为形式参数。形式参数只用来在函数内部使用,在函数外部形式参数失效。通常形式参数不用var声明,直接写变量名即可。
实际参数:函数在调用的时候写在小括号中的参数被称为实际参数

函数的作用域

作用域指的是变量存在的范围。Javascript只有两种作用域:

  1. 全局作用域:变量在整个程序中一直存在,所有地方都可以读取。
  2. 函数作用域:变量只在函数内部存在。在函数外部变量失效。

和作用域与之对应的,javascript中有两种变量:

  1. 全局变量:在函数外部声明的变量,它可以在函数内部读取。
  2. 局部变量:在函数内部定义的变量,外部无法读取。

函数的补充说明

  1. ECMAScript规定:不能在非函数的代码块中声明函数。
if(a>0){
    function func(){
        console.log("nihao"); //wrong way!!
    }
}
  1. 可以使用name属性来获取函数名
function func(){}
console.log(func.name);//func
  1. 可以使用length属性来获取函数的参数个数
function func(num1,num2){}
console.log(func.length);//2
  1. 函数中还有一种特殊的函数,叫做自执行函数
(function(){
    console.log('hello');
}())

(function(){
    console.log('hello');
})();

javascript对象

对象是大括号定义的无序的数据集合,由键值对构成,键与值之间用冒号分割,大括号末尾要使用分号表示对象定义结束。
对象是javascript的核心概念,也是最重要的数据类型。javascript的所有数据都可以被视为对象。此外,javascript允许自定义对象。

var obj = {key1:value1,key2:value2};

对象详解

  1. 键名(对象的属性)
  2. 键值
  3. 对象的创建
  4. 对象属性的读写
  5. 对象属性的操作
  6. 对象的引用

键名(对象的属性)

键名也被称为属性(property),对象的所有属性都是字符串,所以加不加引号都可以。

var obj = {'key':value1};

但是,如果属性不符合标识符的条件,则必须加上引号。

var obj = {'1key':value1};

javascript的保留字可以不加引号直接当做对象的属性。

键值

键值是属性所对应的具体的值。javascript的对象的键值可以是任何数据类型。

如果一个属性的值(ability)为函数,通常把这个属性称为“方法”。它可以像函数那样调用这个属性。

var obj={
    name:'zhangsan',
    age:18,
    ablity:function eat(){
        console.log('吃饭');
    }
};
console.log(obj.ablity());

对象的创建

  1. 直接用大括号创建对象
var obj1={};
  1. 使用new命令生成一个Object对象的实例
var obj1=new Object();
  1. 使用Object.create方法创建对象
var obj1=Object.create(null);

上面三行语句是等价的,都表示创建了一个没有键值对的空对象。

一般来说,第一种采用大括号的写法比较简洁,也是最常用的一种创建对象的写法。第二种采用构造函数的写法清晰地表示了意图,第三种写法一般用在需要对象继承的场合。

对象属性的读写

  1. 读取属性
    读取对象的属性,有两种方法:一种是使用点运算符,还有一种是使用方括号运算符。
var obj = {
    key:'value'
};
console.log(obj.key);
console.log(obj['key']);

使用方括号读取对象属性的时候需要加引号!

  1. 写入属性
    点运算符用来为对象的属性写入值。

点运算符和中括号运算符都能够给对象的属性赋值,无论属性是否存在(修改属性值)。

中括号运算符总是能代替点运算符。但点运算符却不一定能全部代替中括号运算符。

  1. 中括号运算符可以用字符串变量的内容作为属性名。点运算符不能。
  2. 中括号运算符可以用纯数字作为属性名。点运算符不能。
  3. 中括号运算符可以用js的关键字和保留字作为属性名。点运算符不能。

对象属性的操作

javascript为对象提供了一系列内置的方法,方便我们更好的操作对象。

方法作用
Object.keys()获取对象所有属性
delete删除一个属性
in检查对象是否包含一个属性
for in遍历对象所有属性
with操作多个对象属性

[Object.keys()]获取对象所有的属性,返回一个属性构成的数组

var obj = {
    name:'张三',
    age : 18
};
console.log(Object.keys(obj)); //[ 'name', 'age' ]

[Object.keys()]是一个整体,调用的时候必须整体使用。

[delete] 从对象中删除一个属性

语法:delete obj.property

var obj = {
    name:'张三',
    age : 18
};
delete obj.name;
console.log(obj); //{ age: 18 }

一旦使用delete命令删除某个属性,再读取该属性就会返回undefined。
如果删除一个不存在的属性,delete不报错,而且返回true。千万引起注意!

[in]检查对象是否包含一个属性

语法: ‘key’ in obj

var obj = {
    name:'张三',
    age : 18
};
console.log('name' in obj); //true

检查的是键名,不是键值。如果包含就返回true,否则返回false。

[for in] 遍历对象的所有属性

var obj = {
    name:'张三',
    age : 18
};
for(var prop in obj){
    console.log(obj[prop]);
}

循环变量prop表示的事对象的属性名,并不表示属性的值!!!

[with]同时操作一个对象的多个属性

with(obj){
    key1=value1;
    key2=value2;
}
var obj = {
    name: '张三',
    age: 18
};
with (obj) {
    name = '李四';
    age = 17;
}
console.log(obj);

with只能够修改对象中已经存在的属性,对于对象中原本不存在的属性with无能为力。
with对于ES6以及ES5中的严格模式都已经禁用了,因为with可能会导致代码更难调试和读取。

对象的引用

如果不同的变量名指向同一个对象,那么它们都称为这个对象的引用稿。
也就是说这些变量共同指向同一个内存地址,修改其中一个变量所指向的值,都会影响到其他变量所指向的值。

var obj = {
    fire: 'burn'
};
var obj2 = obj;
var obj3 = obj;
obj.fire = '灭了';
console.log(obj2.fire); //灭了
console.log(obj3.fire); //灭了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值