热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript数据范例原始范例与援用范例(object)详谈

JavaScript中,有七种内置范例:6种原始范例和援用范例,他们离别是:6种原始范例(基础范例):空值(null)未定义(undefined)布尔值(boolean)数字(nu

Javascript中,有七种内置范例:6种原始范例和援用范例,他们离别是:

6种原始范例(基础范例):

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 标记(symbol,ES6中新增)

援用范例:

  • 对象(object)

范例推断

我们能够用typeof运算符来检察范例的值:

typeof(undefined) //"undefined"
typeof('123') //"string"
typeof(123) //"number"
typeof(true) //"boolean"
typeof Symbol() //"symbol"
typeof({name:'oops'}) //"object"
typeof([1,2,3]) //"object"

我们注意到,null值并不在列,为何呢?这里比较特别:

typeof(null) //"object" , 这是js中的一个bug

我们应当运用准确的要领来推断null值的范例:

var a = null;
(!a && typeof a ==='object') //true

如今让我们来看另一个题目:什么是undefined?
答案是:变量在未持有值时,变量的范例为undefined。
为何我会在这里会零丁提出这个题目?由于许多开发人员把undefined等同于undeclared(未声明),这是一个观念性的毛病。已在作用域中声明的变量但未赋值的,称为undefined;相反,还未在作用域中声明的变量,称为undeclared(未声明)。
举个栗子:

var a;
a; //undefined
c; //Uncaught ReferenceError: c is not defined

是不是是遽然邃晓了这两者的差异,BUT!!,请看这个栗子:

var a;
typeof a; //"undefined"
typeof b; //"undefined"

新鲜,变量b未在作用域中声明,为何不报错且typeof的值怎样照样undefined?那是由于typeof的一种特别的平安机制。应用这点,当我们用if前提语句推断某个变量是不是有值时,能够用这类要领。举个栗子:

//变量a未声明,以下体式格局会报错
if(a){
...
}
//变量a未声明,以下体式格局就是平安的
if( typeof a !== "undefined"){
...
}

so ,经由过程typeof搜检undeclared变量是个不错的要领。

基础范例(原始范例)

js中有六种基础范例,他们是:UndefinedNullBooleanNumberStringSymbol (new in ES 6),基础范例的贮存体式格局为栈内存(Stack)贮存,下图所示。
《Javascript数据范例----原始范例与援用范例(object)详谈》

由此得出以下三点结论;

  1. 基础范例的值是不可变的
  2. 基础范例的比较是它们的值的比较
  3. 基础范例的变量是存放在栈内存(Stack)里的

举个栗子:

var a = "oops";
b = a;
b; //"oops"
a = "哈哈";
a; //"哈哈"
b; //"oops" ,a值的转变不会影响b的值

援用范例

我们先来一个栗子看看援用范例是如安在盘算机内存储的:

var a ={};
var b;
a.name = "oops";
a.age = 24;
b = a;
console.log( b.age ); //24
a.name = "hz";
b.age = 18;
console.log( a.age ) //18

《Javascript数据范例----原始范例与援用范例(object)详谈》

从这个例子中能够看出,援用范例的值是保留在堆内存(Heap)中的对象,栈内存保留变量的指针,堆内存中保留详细的对象。

做个小小的延长:

var a ={name:"hz"};
var b ={name:"hz"};
console.log( a == b ); //false
console.log( a === b ); //false

在这个栗子中,a,b两个对象都有一条雷同的值,但这两个对象却不相称,为何呢?由于
a ,b 两个对象离别援用的是存放在堆内存中的2个差别的对象,故变量 a和 b的值(援用地点)也是不一样的。

以上。
有毛病的处所愿望人人指出来,配合讨论。

参考资料:
【文章】 Javascript 深切相识基础范例和援用范例的值
【书本】 你不知道的Javascript(中卷) 第一章:范例


推荐阅读
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文深入探讨了JavaScript中`this`关键字的多种使用方法和技巧。首先,分析了`this`作为全局变量时的行为;接着,讨论了其在对象方法调用中的表现;然后,介绍了`this`在构造函数中的作用;最后,详细解释了通过`apply`等方法改变`this`指向的机制。文章旨在帮助开发者更好地理解和应用`this`关键字,提高代码的灵活性和可维护性。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 利用 JavaScript 和 Node.js 验证时间的有效性
    本文探讨了如何使用 JavaScript 和 Node.js 验证时间的有效性。通过编写一个 `isTime` 函数,我们可以确保输入的时间格式正确且有效。该函数利用正则表达式匹配时间字符串,检查其是否符合常见的日期时间格式,如 `YYYY-MM-DD` 或 `HH:MM:SS`。此外,我们还介绍了如何处理不同时间格式的转换和验证,以提高代码的健壮性和可靠性。 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
  • 使用 Vuex 管理表单状态:当输入框失去焦点时自动恢复初始值 ... [详细]
  • 本文深入探讨了C#中的反射与特性功能。首先,介绍了反射的基本概念,即通过元数据(包括类的方法、属性和字段等)在运行时动态获取和操作程序信息的能力。此外,还详细解析了特性的使用方法及其在代码注解和元数据扩展中的重要作用,为开发者提供了丰富的编程技巧和实践指导。 ... [详细]
author-avatar
手机用户2502914287
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有