对象
对象的创建方法
- var o=new object(); //构造函数创建法
- var o={a:1}; //字面量创建法
- 名字称作key(键),值称为value(值)即键值对的形态
- 每个键对应唯一的值,
对象的调用方法
- console.log(o.a); 用点语法不加双引号
- console.log(o[“a”]);
- 键必须是字符串或者Symbol,如果不是字符串,则会隐式转换为字符串
对象的存储两种情况、
- 一种存储数据,存储数据的叫做对象的属性
- 一种存储函数, 存储函数的叫做对象的方法
- 如果键是个变量,则不能使用点语法,需要使用中括号带入
var a=String.fromCharCode(102);//将ASCII码转换为字符 97~122就是小写字母a~z
-
删除属性(如果属性不存在,则也不会报错
- delete o.c;
-
对象存储的内容相互之间是独立,无关联的
-
如果需要对象中查找是否有某个键(“a” in o);
-
如果需要在对象中查找是否有某个值,只能通过for in遍历
-
for (var prop in o)if(o[prop] === 3)console.log(prop,o.[prop])
-
如果需要根据某个属性,查找对应的值,速度非常快,删除和添加也非常快
-
对象存储及调用关系,堆和栈
-
对象等于对象,只是赋值了引用地址,若其中一个后面修改,则两个都会被改
-
浅复制
-
深复制 才可将一个对象的每个属性都复制,没有引用关系
垃圾回收机制
- o=null,
- 将栈中变量o设置为null,表示不再引用对象,然后将对重这个对象的引用列表清除
- 如果一个对象被多个变量引用,只有将引用该变量的所有对象设置为null,才会被垃圾回收
- 只有存储引用地址的变量才需要设置null,来做垃圾标识
- 内存泄漏:大量的不使用的引用对象,没有被标识为null,并且还在不断的生成和丢弃,则会造成内存泄漏
函数
- 函数的结构形态
- function 定义函数
- fns 函数名,任意,与变量起名方式相同,函数名也是变量
- (a,b) 可以向函数中注入的数据,a,b是参数,注入几个数据,就要声明几个参数{}就是函数执行的语句块
- arguments 所有通过执行函数时传入的参数的列表
- return 跳出当前函数,不再执行return以后的语句,并且返回一个数据,return 10;
- fns(4,5);执行函数
- ()标识执行函数,fns是被执行的函数名,执行函数就是将函数中的语句块全部执行
- 4,5 标识的是传参,完全按照参数的顺序赋值
- 当函数执行完成后,如果使用return返回一个值,将会把返回的值赋值给a
- 如果函数中没有return,或者直接return没有返回数据,则返回undefined;
函数创建方式
- 命名函数法
*
function fn1(){};
ES6 类中函数创建
class box{
fn(){}
};
-
函数的调用:可以在当前函数所在的script标签的任意位置或者当前函数所在script标签后面的任意script标签中执行
-
console.dir(fn1);以对象类型表现出来
-
函数被存在堆中,在创建script标签是,将函数存储于堆中,并且栈中以函数名做引用
-
若声明一个变量并赋值与函数名同名,则函数被覆盖,无法找到
-
若仅定义没有赋值,名称与函数名相同,函数不会被覆盖
-
匿名函数法
var fn1=function(){};
- 匿名函数 自执行函数,只能执行一次
~function(){
};
+function(){
};
-
匿名函数不会在初始化是被定义在栈中,会被运行时定义给变量
-
运行到赋值这段代码时候,才将函数赋值给变量,意味这函数在赋值之前不能调用
-
构造函数法
* -
缺点:在调用是,浏览器会将这个函数对象内的所有内容转换为代码,这需要消耗大量
-
优点:可以动态生成函数
-
var JSON.stringify(对象);将对象转换为JSON格式字符串
- json是一种字符串格式{}中属性名是用双引号引起来的
- JSON.parse(json格式的字符串)将json格式的字符串转换为对象(将来用来发送给服务器用)
-
深复制:先将对象转换成JSON字符串,字符串是非引用关系,然后再转换成对象,自动生成新的对象
- JSON字符串在转换时会丢弃对象中的方法
var o=JSON. parse(JSON. stringify(obj));
obj.a=10;
obj.e. f=100;
console.1og(o);
作用域
- 函数外使用var定义的变量都是全局变量
- 在任何位置都可以调用全局变量
- 当我们在函数内使用var定义的变量都是局部变量,就是函数内的局部变量,只能在函数内调用,不能在函数外或者别的函数中调用
- 局部变量在函数执行完成后会销毁局部变量
- 同名函数,只要在函数内任何位置定义了局部变量(使用var 在函数内定义变量),同名全局变量无法进入该函数,在函数内定义局部变量之前调用局部变量,则为undefined
- 若没用var,则为声明全局变量
- 局部变量在函数内的优先级高于全局变量,可认为同名变量为变量提升
- 全局变量是建立在window中,所以可以通过window调用
* - 参数是局部变量