JavaScript-Object

139 阅读6分钟

Object

JS中数据类型

  • String 字符串
  • Number 数值
  • Boolean 布尔值
  • Null 空值
  • Undefined 未定义 以上五种类型属于基本数据类型,只要不是以上五种,都属于对象类型
  • Object 对象

JS中的变量都是保存到栈内存中的

基本数据类型

基本数据类型都是单一的值

基本数据类型的值直接在栈内存中存储

值和值之间没有任何的联系

值与值之间是独立存在,修改意见个变量不会影响其他的变量

也就是

a=123;

b=a;

a++;

a的自增不回改变b的值

引用数据类型

对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟一个新的空间,二变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响.

a=123;

b=a;

a++;

a和b都是保存的地址

地址的内容改变两个值都会发生改变

比较数据类型

当比较两个基本数据类型的值时,就是比较值

而比较两个引用数据类型时,他是比较的对象的内存地址

如果两个对象是一模一样的,但是地址不同,它也会返回false

在JS中表示一个人的信息(name gender age)

var name = "孙悟空" ;

var gender = "男";

var age = 18;

如果使用基本数据类型的数据,我们创建的变量都是独立,不能成为一个整体.

对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性

对象的分类

1.内建对象

  • 由ES标准中定义的对象,在任何的ES的实现中都可以使用
  • 比如:Math String NumberB哦哦乐安 Function Object....

2.宿主对象

  • 由JS的运行环境提供的兑现,目前来讲主要指由浏览器提供的对象
  • 比如 BOM(浏览器对象模型) DOM(文档对象模型)

3.自定义对象

  • 由开发人员自己创建的对象

对象字面量

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

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

对象字面量的属性名可以加引号也可以不加,建议不加

如果要使用一些特殊的名字,则必须加引号

属性名和属性值是一组一组的名值对结构

名和值之间使用:链接 多个名值对之间使用,隔开

如果一个属性之后没有其他的属性了 就不写,

函数

函数也是一个对象

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

函数中可以保存一些代码在需要的时候调用

使用typrof检查一个函数对象时,会返回function

函数的返回值

立即执行函数

函数定义完,立即被执行,这种函数叫做立即执行函数

立即执行函数往往只会执行一次

用括号包上 然后再打一个括号分号 进行立即执行

函数也可以称为对象的属性

如果一个函数作为一个对象的属性保存

那么我们称这个函数是这个对象的方法

调用这个函数就说明调用对象的方法

但是它只是名称上的区别没有其他的区别

作用域

  • 作用域指一个变量的作用的范围
  • 在JS中一共有两种作用域

1.全局作用域

  • 直接编写script标签中的JS代码,都在全局作用域

  • 全局作用域在页面打开时创建,在页面关闭时销毁

  • 在全局作用域中有一个全局对象window ,他代表的是一个浏览器窗口,它由浏览器创建我们可以直接使用

  • 在全局作用域中

    • 创建的变量都会作为window对象的属性保存
    • 创建的函数都会作为window对象的方法保存
  • 全局作用域中的变量都是全局变量,

    • 在页面的任意的二部分都可以访问的到

变量的声明提前

不会报错 但是数值未定义

变量的声明提前:

  • 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),但是如果声明变量是不适用var关键字,则变量不回被声明提前

第一个函数不报错

第二个函数报错

因为函数的声明提前:

  • 使用函数声明形式创建的函数 形如 function 函数(){},他会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数
  • 使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

2.函数作用域

  • 调用函数时创建后函数作用域,函数执行完毕以后,函数作用域销毁
  • 没调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的
  • 函数作用域中可以访问到全局作用域的变量
  • 在全局作用域中无法访问到函数作用域的变量
  • 当在函数作用域中操作一个变量时,他会先在自身作用域中寻找,如果有就直接使用,如果没有则向上一级作用域中寻找,直到找到全局作用域
  • 如果全局作用域中依然没有找到,则会报错ReferenceError
  • 在函数中要访问全局变量可以使用window对象

在函数作用域也有声明提前的特性,使用var关键字声明的变量,会在函数中所有的代码执行之前被声明.函数声明也会在函数中所有的代码执行之前执行

在图一先定义返回35

在图二返回上一层中的10

在图三中先声明 返回值为undefined

在函数中,不适用var声明的变量都会成为全局变量