精华内容
下载资源
问答
  • js值类型和引用类型的区别

    千次阅读 2018-04-28 10:42:48
    1. javascript中变量类型分为值类型(基本数据类型)和引用类型(1) 值类型:String(字符串),Number(数值),Boolean(布尔值),Undefined,Null(2) 引用类型:Array(数组),Object(对象),Function(函数)2. ...

    1. javascript中变量类型分为值类型(基本数据类型)和引用类型

    (1) 值类型:String(字符串)Number(数值)Boolean(布尔值)UndefinedNull

    (2) 引用类型:Array(数组)Object(对象)Function(函数)

    2. 值类型和引用类型的区别

    (1) 存储位置不一样

    ① 值类型的变量会保存在栈内存中,如果在一个函数中声明一个值类型的变量,那么这个变量当函数执行结束之后会自动销毁

    ② 引用类型的变量名会保存在栈内存中,但是变量值会存储在堆内存中,引用类型的变量不会自动销毁,当没有引用变量引用它时,系统的垃圾回收机制会回收它

    栈内存

    堆内存

     a = 10,b = 20;

     

     arr

    [10,20,30,40,50]


    (2) 复制方式不一样

    ① 值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a

    ② 引用类型的变量直接赋值实际上是传递引用,只是浅复制

    输出结果arrarray都会是[1,20,30],要想实现深复制,必须在堆内存中再开辟一块空间

    (3) 值类型无法添加属性和方法,如

    结果都会返回undefined

    (4) 引用类型可以添加属性和方法

    结果person.age=18person.eat返回一个函数

    (5) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。比较的时候注意”==”和”===”,双等号(==)在做比较的时候做了类型转换,而全等号(===)是值和类型相等是才能相等

    结果返回true,两个相同字符串的比较,是值({})的比较,完全相等

    (6)引用类型的比较是引用地址的比较

    结果返回false,两个空对象在堆内存中的地址不一样,所以即使两个一模一样的对象也不一定相等

    展开全文
  • 1. js中,值类型是按值存储的,如下图:2. 引用类型是按引用存储的,存储的不是值,而是一个地址

    1. js中,值类型是按值存储的,如下图:


    2. 引用类型是按引用存储的,存储的不是值,而是一个地址


    展开全文
  • 1.基本数据类型(值类型) 2.复杂数据类型(引用类型) 3.值类型和引用类型的区别 4.检测数据类型的方法 一、基本数据类型(值类型) 1.字符串类型/String 【创建方法】 var str=’abc’; 2.数字类型/Number...

    javascript数据类型分两种:基本数据类型(值类型)、复杂数据类型(引用类型)

    【目录】
    一.基本数据类型(值类型)
    二.复杂数据类型(引用类型)
    三.值类型和引用类型的区别
    四.检测数据类型的方法

    一、基本数据类型(值类型)

    1.字符串类型/String
    【创建方法】
    var str=’abc’;

    2.数字类型/Number
    【创建方法】
    var num=123;

    3.布尔类型/Boolean
    【创建方法】
    var bool01=true;
    var bool02=false;

    4.Null
    【创建方法】
    var nu=null;

    5.Undefined
    【创建方法】
    var un;

    加注点:null和undefined是相等的,为什么相等了,当对象值为null或undefined的时候返回的类型为false,false即为0,true为1

    那么如何判断区分这两个类型呢?

    null == undefined这样的去判断返回的只是值的相等 (返回true)
    null === undefined这样的判断就是判断对象的值和类型都要相等(返回false)

    二、复杂数据类型(引用类型)

    1.对象类型/Object
    【创建方法】
    var obj01=new Object();
    var obj02={};
    function obj03(n){
    var obj=new Object();
    obj.name=n;
    return obj;
    }
    var a=obj03(‘创建方法03’);

    function Obj04(n){
    this.name=n;
    }
    var b=new Obj04((‘创建方法04’);

    2.数组类型/Array
    【创建方法】
    var arr01=[]; 创建数组的方法01
    var arr02=news Array(); 创建数组的方法02

    3.函数类型/Function
    【创建方法】
    //函数申明
    function fun01(n){
    return n;
    }

    //函数表达式
    var fun02=function(n){
    return n;
    }

    三、值类型和引用类型的区别

    值类型:值不会随着变化而变化(两个双胞胎不会发生完全相同的行为)
    var arr03=[1,2,3,4,5];
    var arr04=arr03; //[1,2,3,4,5]
    arr03[1]=9;
    console.log(arr04); //[1,9,3,4,5]

    引用类型区别:创建的对象会随着变化而变化(存在同一个内存中)
    var a=10;
    var b=a; //10
    a=20;
    Console.log(b); //10

    四、检测数据类型的方法

    typeof
    typeof是一个操作符,返回的值是一个字符串
    typeof检测基础数据类型的时候能返回相应的类型(null除外),也可以检测函数的类型,但是在检测对象的时候不能明确的指出对象的类型,因此返回的都将是一个object。

    例:检测基础数据类型的时候
    typeof ‘1’; //string
    typeof 1; //number
    typeof function (){}; //function

    例:检测对象的时候
    typeof {a:1,b:5} ;//object
    typeof [1,1,3] ;//object

    例:检测null的时候(检测null的时候返回的也是object,为什么null也会返回object呢,这是因为null在js中叫空对象指针,可以理解为是一个对象)

    instanceof
    instanceof是一个操作符,返回的值是一个布尔值
    Instanceof是专门检测引用数据类型,而不能检测基础数据类型

    var arr=[1,2,3];
    arr instanceof Array;//true

    var obj={};
    obj instanceof Object;//true

    constructor
    constructor这个属性是存在于构造函数的原型上的,指向到构造函数,对象可以通过__proto__在其所属类的原型上找到这个属性

    Object.prototype.toString.call();

    在Object基本类定义的这个toString()方法,是用来检测数据类型的;
    跟字符串、数字、布尔等原型上定义的toString()方法基本用法都是转换字符串的。

    console.log(Object.prototype.toString.call(1));//[object Number] console.log(Object.prototype.toString.call(’’));//[object String] console.log(Object.prototype.toString.call(true));//[object Boolean]
    console.log(Object.prototype.toString.call(null));//[object Null] console.log(Object.prototype.toString.call(undefined));//[object Undefined]
    console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call({}));//[object Object] console.log(Object.prototype.toString.call(/^$/));//[object RegExp] console.log(Object.prototype.toString.call((function() {})));//[object Function]

    展开全文
  • js值类型和引用类型

    千次阅读 2021-01-08 16:48:39
    js值类型和引用类型 在ES6中js的数据类型分为两种,分别是值类型和引用类型。 常见的值类型:undefined,Boolean,number,String,symbol; 常见的引用类型:Object,Array,null(特殊的引用类型,指针指向空地址...

    js的值类型和引用类型

    在ES6中js的数据类型分为两种,分别是值类型和引用类型。

    1. 常见的值类型:undefined,Boolean,number,String,symbol;
    2. 常见的引用类型:Object,Array,null(特殊的引用类型,指针指向空地址),function(特殊的引用类型,但没有存储数据,所以没有拷贝、复制函数这一说);

    它们的区别

    1. 存储位置不同,值类型直接存储在栈中,而引用类型的值在堆中,并把存储地址存到栈中;

    2. 将一个值类型的变量赋值给另一个变量时,改变其中一个的值,另一个并不会发生改变;

      let a = 2020
      let b = a
      b = 2021
      console.log(a) // 结果:2020
      console.log(b) // 结果:2021
      
    3. 将一个引用类型的变量赋值给另一个变量时,只要改变了其中一个两个就都会发生改变;

      const a = {
      name: '小明',
      age: 15
      }
      const b = a
      b.age = 20
      console.log(a.age) // 结果:20
      console.log(b.age) // 结果:20
      

    typeof运算符

    说到数据类型就不得不说一下typeof运算符,它可以用来判断js变量的类型,那么它能够判断哪些类型呢?

    1. 能够识别所有值类型

    2. 能够判断是否是引用类型(不可再细分,会把Array也认为是object)

    3. 能够识别出函数
      也就是说typeof运算符能够识别出7种类型,分别是:undefined,Boolean,number,String,symbol,object,function

      let a
      console.log(typeof a) // 结果: undefined
      const b = 100
      console.log(typeof b) // 结果: number
      const c = '小明'
      console.log(typeof c) // 结果: string
      const d = {
          name: '小红'
      }
      console.log(typeof d) // 结果: object
      const e = ['a', 'b']
      console.log(typeof e) // 结果: object
      const f = Symbol('foo')
      console.log(typeof f) // 结果: symbol
      

    深拷贝和浅拷贝

    在上面讲值类型和引用类型的区别时,就提到了将一个值类型的变量赋值给另一个变量时,改变其中一个的值,另一个也会发生改变。这种叫做浅拷贝;

    什么是浅拷贝?

    浅拷贝就是将变量所指向的引用地址直接赋值给另外一个变量,也就是说他们访问的是同一份资源,所以两个变量会相互影响。

    什么是深拷贝?

    在大多数项目中,我们需要的是两个变量,并不会相互影响,所以需要用到深拷贝;
    深拷贝会重新创建一个字段和值相同的新的数据,并把其引用地址放回给我们定义的变量。

    	function deepClone (obj) {
        if (typeof obj != 'object' || obj == null) {
            // 如果是值类型或者为 null
            return obj;
        }
        let result;
        // 判断是数组还是对象, 对应不同的初始化结果
        if (obj instanceof Array) {
            result = [];
        } else {
            result = {};
        }
        // 循环遍历对象的属性或者数组的元素,并进行递归深度拷贝
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                result[key] = deepClone(obj[key])
            }
        }
        return result;
    }
    
    const testObj = {
        name: '小明',
        age: 10,
        address: ['北京','上海'],
        score: {
            math: 89,
            english: 91
        }
    }
    const a2 = deepClone(testObj);
    a2.score.math = 100
    
    console.log('testObj的math',testObj.score.math)  //  结果:testObj的math 89
    console.log('a2的math',a2.score.math)  //  结果:a2的math 100
    

    我们发现在改变了第二个变量后第一个并没有发生变化。

    展开全文
  • JavaScript数据类型 JavaScript是一种弱类型语言,在定义变量时不需要指定类型,一个变量可以存储任何类型的值。不过这并不等于JavaScript不区分数据类型,只不过在...其中一种是直接存储数据,称为值类型数据;另一...
  • JS 引用类型与值类型的区别?

    千次阅读 2020-02-20 20:53:12
    引用类型与值类型的区别? 1值类型变量: 变量的交换等于在一个新的作
用域创建一个新的空间,新空间与之前的空间互
不相关和影响。 2变量的交换: 并不会创建一个新的空间,而
是让对象或方法和之前的对象或...
  • JavaScript中的原始类型包括数字、字符串、布尔、undefined、null 1.1.1. 数字 当一个数字直接出现在Js程序中,我们称之为数字直接量 i. 整型直接量:十进制整数、十六进制、Es标准不支持八进制直接量(Es6严格...
  • javascript中申明变量使用的关键字都是var,这点与其他的编程语言不尽相同,但是javascript亦含有五种基本的数据类型(也可以说是简单数据类型),它们分别是:Undefined,Null,Boolean,Number和String。...
  • JavaScript中的值类型与引用类型

    千次阅读 2013-01-10 12:15:19
    一、值类型和引用类型话题 随着部分有大型面向对象语言基础朋友的介入,...就讲讲JavaScript中的两种变量类型:即值类型和引用类型,这通常又会让你联想到“堆栈”,另外还有“引用地址”或“指针”相关概念,有过J
  • javascript中的数据类型1、基本类型(值类型):变量对应的内存空间中存储的就是值 基本类型包括:number,string,boolean,null,undefined2、对象类型(引用类型):变量对应的内存空间中存储的是地址(引用) ...
  • JavaScript 中存在有值类型和引用类型: 常见的值类型:数值、布尔值、null、undefined。 常见的引用类型:对象、数组、函数 日期的Date是一个Object对象,引用类型进行大小相等等比较的时候存在问题 判断...
  • JavaScript基本类型和引用类型

    千次阅读 2015-11-01 21:35:37
    JS变量可能包含两种不同数据类型;基本类型值和引用类型值。基本类型指的是简单的数据段,而引用类型值那些由多个构成的对象; 在将一个赋给变量时,解析器必须确定这个是基本类型值还是引用类型值JS有5...
  • 这一切都和原始包装类型及其声明周期有关:每当用到某个原始的属性或者方法使,javascript总会在后台创建一个原始包装类型的对象,从而暴露出操作原始的各种方法。 在以读模式访问字符串的方法或者属性时,
  • js数据类型及其转换
  • 这篇文章主要是从内存的角度来区分基本类型和引用类型的区别: 1、先了解内存分区(大家需要知道,定义的变量都是在内存中存放的) 内存是存储数据的,不同类型的数据要存储在不同的区域,即分类存放,不同的区域...
  • JS其他类型值转化为Boolean类型规则

    千次阅读 2018-03-16 15:47:18
    由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化j结果为true的情况 ①任何非空字符串 PS:空白字符串也是返回...①任何非0数字(包括无穷
  • js是编程语言:由决定类型(动态解释性语言) var a = 10; var b = a; a = 20; document.write(a),打印结果10 var arr = [1]; var arr1 = arr; arr.push(2); document.write(arr1)打印结果1,2 12.原始...
  • JavaScript的数据类型分为两类:原始类型和对象类型。原始类型包括数字、字符串和布尔,其中有两个特殊的原始null和undefined,但它们不是数字、字符串和布尔。除了原始类型之外,剩下的便是对象,对象是属性...
  • 计算机语言除了由多种语法(结构,表达式)所构成,还有一个重要的因素,那就是数据,而JS语言作为计算机语言的一种自然也定义了多种不同的类型,本章将为大家详细讲解JS中不同的数据类型,以及不同数据类型的特性。
  • 文章目录JavaScript基本类型1. 原始类型:1.1 数值—Number1.2 字符串—String1.3 布尔—Boolean1.4 字符—Symbol(ES6...JS中的基本类型分为原始类型和对象类型两种。 1. 原始类型: 原始类型: Number、Strin...
  • JavaScript 变量包含两种不同类型的值,分别为基本类型值(primitive values)和引用类型值(reference values)。primitive values 指primitive type值,在JavaScript ... JavaScript 对两种值类型的处理是不同的。把
  • 数据类型 转换为true的 转换为false的 Boolean true false String 任何非空字符串 “”(空字符串) Number 任何非零数字(包括无穷大) 0和NaN Object 任何对象 null undfined n/a(no ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 616,340
精华内容 246,536
关键字:

js值类型