JavaScript预解析,对象详解

目录
  • 一、预解析
    • 1、变量预解析和函数预解析
      • 1、变量预解析
      • 2、函数预解析
    • 2、预解析案例
  • 二、对象
    • 1、创建对象的三种方式
      • 1、利用字面量创建对象
      • 2、利用new Object创建对象
      • 3、利用构造函数创建对象
      • 4、构造函数和对象
    • 2、new关键字
    • 3、遍历对象属性
  • 总结

一、预解析

1、变量预解析和函数预解析

JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行。

  • 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。
  • 代码执行: 从上到下执行JS语句。

预解析只会发生在通过 var 定义的变量和 function 上。学习预解析能够让我们知道为什么在变量声明之前访问变量的值是 undefined,为什么在函数声明之前就可以调用函数。预解析也叫做变量、函数提升。

1、变量预解析

变量预解析: 变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。

例如:

  /*先解析var变量num
  然后执行console输出
  最后把10赋给num*/
console.log(num);  // 结果是多少?
var num = 10;      // ?

2、函数预解析

函数预解析: 函数的声明会被提升到当前作用域的最上面,但是不会调用函数。

/*先解析fn函数的定义
然后执行console语句*/
console.log("1+2+3+...+100=",fn());
		function fn(){
			var s = 0;
			for(var i=1;i<=100;i++){
				s += i;
			}
			return s;
		}

2、预解析案例

来做一个小练习,看一下输出的结果是多少?

console.log((a));
var a = 1;
 console.log((a));
 function a(){
    return a;
 }

结果为:

二、对象

在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的。

  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)

1、创建对象的三种方式

1、利用字面量创建对象

对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)的属性和方法。{ } 里面采取键值对的形式表示 。

  • 键:相当于属性名
  • 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
var star = {
    name : 'xl',
    age : 18,
    sex : '女',
    sayStudy : function(){
        console.log('好好学习啊');
    }
};

对象里面的属性调用 : 对象.属性名 ,这个小点 . 就理解为“ 的 ” 。例如:star.name

对象里面属性的另一种调用方式 : 对象[‘属性名'],注意方括号里面的属性必须加引号。例如:star['age']

2、利用new Object创建对象

和前面学习的new Array() 创建数组原理一致

var andy = new Object();
andy.name = 'xl';
andy.age = 18;
andy.sex = '女';
andy.sayStudy = function(){
   console.log('好好学习啊');
}
  • Object() :第一个字母大写
  • new Object() :需要 new 关键字
  • 使用的格式:对象.属性 = 值;

3、利用构造函数创建对象

构造函数 :是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

在 js 中,使用构造函数要时要注意以下两点:

  • 构造函数用于创建某一类对象,其首字母要大写
  • 构造函数要和 new 一起使用才有意义

例如:

function MyName(name,age,sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
}
var xl = new MyName('熊柳','18','女');
var huan = new MyName('王欢','16','女');
console.log('xl.name='+xl.name);
console.log('huan:');
console.log(huan);

打印结果为:

注意

  • 构造函数约定首字母大写。
  • 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
  • 构造函数中不需要 return 返回结果。
  • 当我们创建对象的时候,必须用 new 来调用构造函数。

4、构造函数和对象

  • 构造函数,抽象了对象的公共部分,封装到了函数里面,它泛指某一大类(class)
  • 创建对象,特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化。

2、new关键字

new 在执行时会做四件事情:

1.在内存中创建一个新的空对象。

2.让 this 指向这个新的对象。

3.执行构造函数里面的代码,给这个新对象添加属性和方法。

4.返回这个新对象(所以构造函数里面不需要return)。

3、遍历对象属性

for…in 语句用于对数组或者对象的属性进行循环操作。

其语法如下:

for (变量 in 对象名字) {
    // 在此执行代码
}

语法中的变量是自定义的,它需要符合命名规范,通常我们会将这个变量写为 k 或者 key。

for (var k in obj) {
    console.log(k);      // 这里的 k 是属性名
    console.log(obj[k]); // 这里的 obj[k] 是属性值
}

例如构建了如下对象

function Hero(name,type,blood,attack){
    this.name = name;
    this.type = type;
    this.blood = blood;
    this.attack = attack;
}
var lianpo = new Hero('廉颇','力量型','500血量','近战');
var houyi = new Hero('后羿','射手型','100血量','远程');

当执行for..in语句时,打印k和obj[k]会分别得到如下结果:

function Hero(name,type,blood,attack){
    this.name = name;
    this.type = type;
    this.blood = blood;
    this.attack = attack;
}
var lianpo = new Hero('廉颇','力量型','500血量','近战');
var houyi = new Hero('后羿','射手型','100血量','远程');

for(k in lianpo){
    console.log(lianpo[k]);
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • js作用域和作用域链及预解析

    变量---->局部变量和全局变量, 作用域:在某个空间范围内,可以对数据进行读写操作 局部作用域和全局作用域 js中没有块级作用域-一对括号中定义的变量,这个变量可以在大括号外面使用 函数中定义的变量是局部变量 作用域链:变量的使用,从里向外,层层的搜索,搜索到了就可以直接使用了 层层搜索,搜索到0级作用域的时候,如果还是没有找到这个变量,结果就是报错 在 JavaScript 中, 对象和函数同样也是变量. 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合. JavaScr

  • JavaScript中5个常用的对象

    目录 1.JavaScript对象 1).Array对象 2).Boolean对象 3).Date对象 4).Math对象 5).Number对象 6).String对象 前言: 相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScript,因为它对做网页方面是有很大作用的. 1.JavaScript对象 在JavaScript中有许多有用的对象,它们可以用来

  • js对象的读取速度实例详解

    1.访问字面量和局部变量最快,而访问数组元素和对象成员相对较慢.访问对象成员时,就像作用域链一样,在原型链上搜索. 2.如果找到的成员在原型链中的位置太深,访问速度就会变慢. 所以要尽量减少对象成员的搜索次数和嵌套深度. 实例 // 进行两次对象成员查找 function hasEitherClass(element, className1, className2) { return element.className === className1 || element.className ==

  • 详解js的作用域、预解析机制

    虽然,ES6在我们工作中应用得越来越广泛,但是还是很多项目保留着ES5的写法,所以,今天,带着大家重新巩固下ES5下的作用域及预解析机制. 概念: 作用域:域,指的是一个空间.范围.区域,作用指的是在域内可进行读写操作.一个变量的作用域是程序源代码中定义的这个变量的区域. 在ES5中,只存在全局和函数级作用域,在ES6中,引入了块级作用域,js的预解析机制大概分为两个过程:预解析和自上而下逐行解读 预解析:js解析器会先把var定义的变量.function.参数等一些东西存储进仓库里面(内存).

  • JavaScript面向对象实现放大镜案例

    本文实例为大家分享了JavaScript面向对象实现放大镜的具体代码,供大家参考,具体内容如下 效果图 实现原理分析 如图所示 触发鼠标的移动事件时,根据事件对象的 clientX 和 clientY 属性得到实时的坐标点 x 和 y 值 ,减去 small_box 的 offsetLeft 值 和 cutting_box 的宽度的一半 ,可以得到 cutting_box 的偏移量 left 值,top值同理.当 cutting_box 到达右侧和下侧时,left 和 top 取得最大值.用 实

  • JavaScript 预解析的4种实现方法解析

    预解析:在当前作用域下,js运行之前,会把带有var和function关键字声明的变量先声明,并在内存中安排好.然后从上至下解析js语句.而且function的声明优先于var声明. 不多说,,直接上代码 正规写法: var num=10; fun(); function fun(){ console.log(num);//undefined var num=20; } 预解析里:先将变量和函数提前,如下: var num; function fun(){ var num; console.lo

  • JavaScript预解析,对象详解

    目录 一.预解析 1.变量预解析和函数预解析 1.变量预解析 2.函数预解析 2.预解析案例 二.对象 1.创建对象的三种方式 1.利用字面量创建对象 2.利用new Object创建对象 3.利用构造函数创建对象 4.构造函数和对象 2.new关键字 3.遍历对象属性 总结 一.预解析 1.变量预解析和函数预解析 JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的.JavaScript 解析器在运行 JavaScript 代码的时候分为两步:预解析和代码执行. 预解

  • JavaScript操作DOM对象详解

    一.DOM基础 DOM(Document Object Model)即文档对象模型,针对HTML和XML文档的API(应用程序接口).DOM描绘了一个层次化的节点树,运行开发人员添加.移除和修改页面的某一部分.DOM中的三个字母,D(文档)可以理解为整个Web加载的网页文档:O(对象)可以理解为类似Window对象之类的东西,可以调用属性和方法,这里我们说的是document对象:M(模型)可以理解为网页文档的树型结构. 1.节点 加载HTML页面时,Web浏览器生成一个树型结构,用来表示页面内

  • JavaScript 深层克隆对象详解及实例

     JavaScript 深层克隆对象 今天做项目,有个需求需要用到深层克隆对象,并且要求在原型链上编程 于是心血来潮索性来复习一下这个知识点,在网上找了相应的知识, 克隆对象,这名词看着高大上,其实也没什么,便是拷贝一个长的一模一样的对象 也许有初学的小伙伴在想,那还不简单么,so easy var obj1 = {name: 'payen'}; var obj2 = obj1; 这可并不是克隆对象,obj1和obj2根本就是同一个对象, 他俩指向同一个内存地址空间,拿到了同样的一个小房子 这是

  • Javascript之Date对象详解

    Date对象即日期时间对象,它的主要功能是实现对日期时间的处理 1.创建Date对象 复制代码 代码如下: var myDate = new Date(); 或 复制代码 代码如下: var myDate = new Date("July 21, 1983 01:15:00");//此种方法为自定义日期时间的方式,格式若不对的话为提示Invalid Date Date对象的constructor属性为:Date document.write(myDate.constructor ==

  • javascript中clone对象详解

    开发中,打断对象间的引用关系,只想下个副本的情况无处不在,clone一个对象就在所难免了. JavaScript中,简单的方法就是用JSON函数,将对象stringify成字符串,再parse成一个新对象.要么就是从网上搜个代码,开源社区里面clone的代码还是有不少的. 代码虽然可以找得到,但,东西永远是别人的,动手学着码永远是个不变的主题. 自己写了两个克隆的函数: cloneOwn:克隆自定义对象的自有属性,不包括继承的属性,属性可以是基本数据类型和数组,自定义的对象,可以制定要克隆的属性

  • Javascript之Math对象详解

    Math对象不同于上述的对象,它可以说是一个公共数学类,里面有很多数学方法,用于各种数学运算 但是Math对象不需要构造,对于其中的方法直接使用即可 1.常量(即属性) E       返回算术常量 e,即自然对数的底数(约等于2.718) E 返回算术常量 e,即自然对数的底数(约等于2.718) LN2 返回 2 的自然对数(约等于0.693) LN10 返回 10 的自然对数(约等于2.302) LOG2E 返回以 2 为底的 e 的对数(约等于 1.414) LOG10E 返回以 10

  • Javascript中arguments对象详解

    在上篇文章中我们讨论了javascript中的默认参数,这篇文章,我们来讨论下javascript的arguments参数对象. 如下例的一个函数,我们如何根据传入参数的不同来做不同的处理呢? 复制代码 代码如下: function addAll () {     // What do we do here? } // Should return 6 addAll(1, 2, 3); // Should return 10 addAll(1, 2, 3, 4); 幸运的是,javascript有

  • Javascript之String对象详解

    String 对象用于处理文本(字符串). 1.创建String 复制代码 代码如下: var str = "Hello World"; var str1 = new String(str); var str = String("Hello World"); 此三种方法都可以,但是略有区别 2.length属性--->返回字符串的长度 3.anchor() 方法用于创建 HTML 锚. HTML锚是什么? 就是<a ...>...</a>

  • JavaScript的Proxy对象详解

    目录 一.Proxy 是什么? 二.怎么用? 1.使用 Proxy 的简单实例 2.目标对象被正确修改 3.使用 set handler 做数据验证 4.扩展构造函数 总结 一.Proxy 是什么? Proxy 对象用于拦截并修改目标对象的指定操作. // 语法 const p = new Proxy(target, handler) target :目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理). handler :以函数作为属性的对象,实现拦截和自定义操作. 二.怎么用

  • javascript中的糖衣语法Promise对象详解

    目录 一.Promise的诞生 1.回调地狱 二.Promise的行为 1.Promise的语法 2.Promise的方法 (1)Promise.prototype.then() (2)Promise.prototype.catch() (3)Promise.prototype.finally() (4)Promise.resolve() (5)Promise.reject() (6)Promise.all() (7)Promise.race() 三.Promise的场景 1.Ajax请求 2.

随机推荐