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声明的变量都会成为全局变量