引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,用于将数据和功能组织在一起

  对象是某个特定引用类型的实例。新对象是使用new操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,只不过该函数是用于创建新对象的目的而定义的,

  

  ·Object类型

    目前为止,我们看到的大多是引用类型都是Obejct类型的实例。

    var person = {name:'xx'};   通过这种对象字面量定义对象时,实际上不会调用Object构造函数

  ·Array类型

  ·Date类型

  ·RegExp类型

  ·Function类型

    函数很有意思,函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定

    将函数理解为指针,也有助于理解为什么ECMAScript中为什么没有函数重载的概念。

    函数声明与函数表达式:

<script>
demo1();
demo2(); //会报错
function demo1(){}
var demo2 = function (){}
</script>

  解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并在其执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。

  函数内部属性:

    在函数内部,有两个特殊的对象:arguments 和 this

    arguments : 它是一个类数组对象,包含着传入函数中的所有参数。虽然arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。一般是用在递归为避免与函数名耦合而使用这个属性。

    this : 挡在网页的全局作用域中调用函数时,this对象引用的就是window

  函数的属性和方法:

    每个函数都包含两个属性 : length 和 prototype

    length : 表示函数希望接收的命名参数的个数

    prototype : 在ECMAScript 核心所定义的全部属性中,最耐人寻味的就要数 prototype属性了。对于ECMAScript中的引用类型而言,prototype 是保存它们所有实例方法的真正所在。换句话说,toString()  和 valueOf()  等方法实际上都保存在prototype名下,只不过是通过各自对象的实例访问罢了。在创建自定义引用类型以及实现继承时,prototype属性是极为重要的。在ECMAScript中,prototype属性是不可枚举的,因此使用for-in 无法枚举。

    每个函数都包含两个非继承而来的方法: apply() 和 call() 。 这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

    

  ·基本包装类型

    为了方便操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean ,Number 和 String。这些类型与本章介绍的其他引用类型相似,但同时也具备与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据,

  

<script>var s1 = "some text";var s2 = s1.substring((2));
</script>

我们知道,基本类型值不是对象,因而从逻辑上讲它们不应该有方法(尽管如我们所愿,它们确实有方法)

为了让我们实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台会自动完成下列处理。

    var s1 = new String("some text");var s2 = s1s.substring(2);s1 = null;

结果此番处理,基本的字符串值就变得跟对象一样了。而且,上面这三个步骤也适用于Boolean 和Number对应的布尔值和数字值

  引用类型和基本包装类型主要区别就是对象的生存期。使用new 操作符创建的引用类型的实例,在执行流离开当前作用域之前一直都保存在内存中。而自动创建的基本包装类型的对象,则只存在于一行代码执行瞬间,然后立即销毁,这意味着我们不能在运行时为基本类型值添加属性和方法

    var s3 = "texts";s3.color = 'red';console.log(s3.color);  //undefined

为什么会这样?因为第二行创建的String对象在执行到第三行代码时已经销毁了。第三行代码又创建了自己的String对象,而该对象没有color属性

Object构造函数也会像工厂方法一样,根据传入值的类型返回相应基本包装类型的实例。例如

var obj = new Object("123");
console.log(obj);  //String {"123"}
console.log(obj instanceof  String); //true

把字符串传给Object构造函数,就会创建String的实例;而传入数值参数就会得到Number的实例,传入布尔值参数就会的带Boolean的实例。

·基本包装类型之Boolean类型

  前面讨论过,布尔表达式中所有对象都会被转为true。所以我们建议永远不要使用Boolean对象,以免造成误解

<script>
var boo = new Boolean(false);
console.log(boo);  // Boolean {false}
console.log(Boolean(boo)); // true
</script>

·基本包装类型之Number类型

  方法:

      toFixed()  --- 按照指定的小数位返回数值

<script>
var num = 10.00001;
console.log(num.toFixed(2)); //10.00
</script>

  注意 :

    与Boolean类型类似,Number对象也以后台方式为数值提供了重要的功能。但与此同时,我们仍不建议直接实例化Number类型,而原因和显式的创建Boolean对象一样。具体来讲,就是在使用typeof

和instanceof 操作符测试基本类型数值和引用类型数值时,得到的结果完全不同

<script>
var num = 10.00001;
var num_2 = new Number(10.00001);
console.log(typeof num);  // number
console.log(typeof num_2);  // object
console.log(num instanceof Number ); // false
console.log(num_2 instanceof Number );  // true</script>

·基本包装类型之String类型

  方法 :

    slice()

    substring()

    substr()

    indexOf()

    push()

    trim()

-------------------单体内置对象

  ECMA-262对内置对象的定义是:youECMAScript实现,不依赖宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。意思是说,开发人员不必显式的实例化内置对象,因为它们已经实例化了。前面我们已经介绍了大多数内置对象,例如Object  , Array 和String 。ECMA-262还定义了两个单体内置对象:Global 和Match

·Global

Global(全局)对象可以说是EECMAScript中最特别的一个对象了,因为不管你从什么角度看,这个对象都是不存在的。它在某种意义上是作为一个终极‘兜底儿’对象。

换句话说,不属于任何其他对象的属性和方法,都是Global对象的属性和方法。事实上,没有全局变量或全局函数;所有在全局作用域定义的属性和函数,都是Global对象的属性。前面

介绍过的那些函数,诸如 isNaN() , parseInt() 实际上都是Global对象的方法。

Global对象还包含一些属性。例如:特殊值undefined,NaN 以及Infinity都是Global对象的属性。此外,所有原生引用类型的构造函数,像Object和function , 也都是Global对象的属性

ECMAScript严禁给undefined ,NaN 和 Infinity赋值,这样做即使在非严格模式下也会导致错误。

·window对象

  ECMAScript 虽然没有指出如何直接访问Global对象,但Web浏览器都是将这个全局对象作为window对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,都成为了window对象的属性

  注 : js中window对象除了扮演ECMAScript规定的Global对象的角色外,还承担了很多别的任务。详阅js高程第八章

  js中,在没有明确给定this值的情况下,this 就是指向window对象

·Math对象

  该对象是进行高级数学运算的对象,此处不再赘述

转载于:https://www.cnblogs.com/cl94/p/11235602.html

js基础 之 引用类型相关推荐

  1. js基础--数据类型检测的相关知识

    欢迎访问我的个人博客:www.xiaolongwu.cn 前言 最近工作有点忙,好几天都没更新技术博客了. 周末起床打开有道云笔记,发现自己的博客todolist里躺了一堆只有名字的文件. 话不多说, ...

  2. (四)JS基础知识一(深入分析变量类型和计算)【不会变量,别说你会JS】

    JS基础知识一(变量类型和计算) 提问 变量类型 值类型 vs 引用类型 (堆栈模型) 值类型 引用类型 typeof 运算符 深拷贝 变量计算 字符串拼接 == if语句和逻辑运算 if语句 逻辑判 ...

  3. js笔记(一)js基础、程序结构、函数

    大标题 小节 一.js 基础 1. javascript的组成: 2. 运行js: 3. 打印信息: 4. 关键字var: 5. js中的数据类型: 6. NaN(not a number): 7. ...

  4. js php 数据类型判断,【js基础】变量类型判断

    类型判断方法比较: 如果需要想详细了解,请看下文: 注:原封不动复制备份,防止删帖 在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, B ...

  5. Js基础——变量类型和计算

    JS基础--变量类型和计算 一.基本数据类型 二.引用类型 三.typeof判断数据类型 四.浅拷贝与深拷贝 4.1 浅拷贝 4.2 深拷贝 五.数据类型转换 5.1== 和 === 一.基本数据类型 ...

  6. 前端工程师面试问题归纳(一、问答类html/css/js基础)

    一.参考资源 1.前端面试题及答案整理(一) 2.2017年前端面试题整理汇总100题 3.2018最新Web前端经典面试试题及答案 4.[javascript常见面试题]常见前端面试题及答案 5.W ...

  7. 2019年JS基础面试题

    #JS基础 ###1.javascript的typeof返回哪些数据类型 string number array object function Boolean undefined 数组(Array) ...

  8. JS内置引用类型/内置对象

    JS内置引用类型/内置对象 概述 对象在 JavaScript 中被称为引用类型的值/实例,在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称 ...

  9. JS基础:变量、函数、对象、数组、循环、选择(判断)

    JS基础:变量.函数.对象.数组.循环.选择(判断) js的三个组成部分 ECMAScript - ES - 语法规范 DOM - 文档对象模型 - API BOM - 浏览器对象模型 - API j ...

最新文章

  1. Python 的基本数据类型
  2. 发现一个可以搜索常用rpm包的地址(http://www.rpmfind.net/)
  3. 计算机网络概述---传输层 UDP和TCP
  4. 从零搭建React全家桶框架教程
  5. java组合与继承始示例_排列组合:用公式示例解释的差异
  6. clickhouse时间日期函数
  7. ubuntu里面控制器放大缩小屏幕
  8. 二阶滤波器matlab代码,双二阶滤波器之MATLAB设计及C语言实现
  9. python中re模块的group()和groups()
  10. java nio 坑_把Java的nio坑逐个踩一遍
  11. 电脑消除,彻底清除电脑垃圾,让电脑运行更流畅!
  12. 一年级金字塔框填数字_一年
  13. VMware Workstation未能挂起虚拟机
  14. NavigationBar 隐藏底部边线,阴影
  15. 装了xmapp还需要装mysql吗_安装xamp之后,appach、mysql等问题的总结
  16. 和阿里的测试总监聊过后,才知道为什么我的薪资一直在原地踏步!
  17. 曲面积分的投影法_在家学|第一类曲面积分与第二类曲面积分的计算
  18. Committer identity unknown *** Please tell me who you are...
  19. .Trash-1001 and .Trash
  20. AVA设计模式初探之组合模式

热门文章

  1. 焦距物距像距图解 示意图_自制小孔成像装置 鞋盒DIY简单小孔成像制作图解
  2. PHP中数据类型转换有多少种,PHP中数据类型转换的三种方式
  3. 阶乘末尾蓝桥杯java_Java实现第九届蓝桥杯阶乘位数
  4. 死磕java_死磕 java同步系列之AQS起篇
  5. Lesson 3 Part 1 Locally weighted regression
  6. web怎么在圆圈里画半html,在WEB里绘制爱心
  7. tomcat上的javaweb项目如何将ip地址更换为域名_Java Web 路线规划
  8. php的五大,PHP 7的五大效能
  9. 全志JAVA_android 全志a10(2.3.4)开发1(编译环境搭建)
  10. linux如何压缩磁盘,Linux初级运维(十二)——磁盘及文件系统管理