YvetteLau / Step-By-Step

不积跬步,无以至千里;
704 stars 66 forks source link

JS中基本数据类型有哪几种?null 是对象吗?基本数据和复杂数据类型有什么区别? #5

Open YvetteLau opened 5 years ago

zyq503454535 commented 5 years ago

1.基本数据类型:Symbol, String, Number , Undefined, Null, Boolean 2null为一个对象,可以用typeof null || Object.prototype.toString(null) 测试 3区别:在拷贝时,基本数据类型直接拷贝内容,复杂数据类型拷贝引用地址

jizx commented 5 years ago

1、es5定义了5种基本类型,Null、Undefined、Boolean、String、Number,es6新增了Symbol。 2、虽然 typeof null === 'object' 为true,但是null 不是对象,属于基本类型的一种。 3、基本数据类型是值拷贝,复杂数据类型是引用拷贝

tpxiang commented 5 years ago

1、一共有六种,null、undefined、number、Boolean、string、symbol,其中symbol为es6新增。 2、null通过typeof打印是对象。 3、基本数据类型存在栈中,直接存入的是值。复杂数据类型在栈中存入的是地址,该地址指向堆内存,在堆内存存入的是具体值。因此,在拷贝时,基本数据类型拷贝的是具体值,而复杂数据类型拷贝的指向堆内存的引用地址。

dashengzi66 commented 5 years ago

1.基本数据类型(5种):null、undefined、number、Boolean、string(es6新增symbol) 2.null是对象 3.基本数据类型把数据名和值直接存储在栈当中,复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值,访问时先从栈中获取地址,再到堆中拿出相应的值

chang229 commented 5 years ago

1,js中有6中数据类型:string,boolean,number,null,undefined,object,ES6新增了symbol。 2,null本身不是对象,typeof null === 'object’,是语言本身的一个bug。其原理是不同的对象在底层都是用二进制来表示的,在js中二进制前3位是0即判断是为对象,null的二进制表示是全0,即前三位都是0,所以执行typeof返回的是object,实际上null为基本数据类型。 3,(1)基本数据类型的值存在栈中,复杂数据类型在栈中存的是地址,其真正的值存在堆中。 (2)当基本数据类型作为参数传给函数时,函数对其改变不会改变外面的值,复杂数据类型作为参数时,函数内部对参数值的修改会改变外部变量的值。

shenanheng commented 5 years ago

1,Number,Boolean,String,Symbol,Undefined,Object,null一共7种; 2,typeof(null) ===> 'object' 3.引用类型 存在与堆中地址中,基本类型存在与栈当中;就相当于C语言里面的指针

ZhangWeiC commented 5 years ago

基本数据类型:Number, Boolean, String, Undefined, Null,es6多一个Symbol

null不是一个空引用,而是一个原始值。typeof null返回object似乎是历史遗留的bug😂

基本数据数据类型存储在栈,存储的是值;复杂数据类型的值存储在堆,地址存储在栈。所以在赋值的时候实际上复制的是地址,指向同一个内存空间;当一个对象改变时,另一个也会改变

zwq357smile commented 5 years ago

1.基本数据类型:Symbol, String, Number , Undefined, Null, Boolean 2null为一个对象,可以用typeof null || Object.prototype.toString(null) 测试 3区别:在拷贝时,基本数据类型直接拷贝内容,复杂数据类型拷贝引用地址

taoyaoyaoa commented 5 years ago

1.js中有5种数据类型:Undefined、Null、Boolean、Number和String。 2.NULL:代表声明了一个空对象,不是一个字符串,可以赋给任何对象 3.基本数据类型把数据名和值直接存储在栈当中 复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值,访问时先从栈中获取地址,再到堆中拿出相应的值

CCZX commented 5 years ago

string、number、undefined、null、object、symbol。 null不是一个对象而是一个原始值。 基本数据类型的值存储在栈内存里,而复杂类型的的地址存储在栈内存,值存储在堆内存。

ahaow commented 5 years ago
  1. String,Number,Boolean,Null,Undefined,Symbol;
  2. 不是
  3. 基本数据类型是存在栈内存中的,引用类型是存在堆内存中的; 引用类型是保存在堆内存中的,然后再栈内存中保存一个对堆内存中实际对象的引用,所以JS中引用数据类型的操作都是操作对象的引用而不是实际的对象,从而延伸出了 “深拷贝和浅拷贝”的问题
zhangxianhui commented 5 years ago

1.基本数据类型:Number, String, Undefined,Null ,Boolean es6新增Symbol 2null 不是一个对象 虽然typeof 判断返回一个对象 区别:基本类型 在创建是 会在栈上画出一块内存 将数值直接存到栈上 引用类型 在创建是 首先会在栈上给他引用分配一块空间 尔对象的具体信息存在堆内存里 然后根据栈的上的指针指向堆中的对象地址 也就是查询

chongyangwang commented 5 years ago

基本数据类型有: String, Number,Boolean, undefined, null 引用数据类型有: object,function null 是对象 理解基本数据类型,和引用数据类型为 基本数据类型值 存放于栈内存中 引用数据类型 内存存放于堆内存中 只是向栈中保留一个指针 根据指针去取。

KRISACHAN commented 5 years ago

JS的基本类型(primitive values)有

除 Object 以外的所有类型都是不可变的(值本身无法被改变)。

鱼头注:在最新的ECMA proposal里有个处于Stage 3的基本数据类型 BigInt ,用于表示比253大的所有数字。

具体可参考:

https://tc39.github.io/proposal-bigint/#sec-bigint-objects

null是对象吗?

在ECMA文档里的定义是:

原始值,表示缺省任何对象值(object value)

typeof null === 'object' 是个早在第一版的 JS 就存在的 BUG。在这个版本里,JS 值是以 32位 为单位存储的,由 小型标记(1 - 3位)真实值 组成。类型标签存储在低位的单元里。其中5个是:

两种特殊值

复杂类型

JS的复杂类型只有 Object 一种。

在计算机科学中, 对象是指内存中的可以被 标识符引用的一块区域。

在 Javascript 里,对象可以被看作是一组属性的集合。用 对象字面量语法 来定义一个对象时,会自动初始化一组属性。而后,这些属性还可以被增减。属性的值可以是任意类型,包括具有复杂数据结构的对象。属性使用键来标识,它的键值可以是一个字符串或者符号值 (Symbol)

JS基本类型与复杂类型的区别

基本类型存储的是值,复杂类型存储的是地址(指针)。

当你创建了一个复杂类型的时候,计算机会在内存中帮我们开辟一个空间来存放值,但是我们需要找到这个空间,这个空间会拥有一个地址(指针)。

当我们将变量赋值给另外一个变量时,复制的是原本变量的地址(指针),当我们进行数据修改的时候,就会修改存放在地址(指针) 上的值。

965969480 commented 5 years ago

基本类型有5种 null.undefined.string.number.booleen es6新增symbol类型 通过typeof null返回object验证null是一个对象 基本类型储存在栈中,复杂类型储存在堆中,通过栈中保存的堆地址取值

clairing commented 5 years ago

1:JS中基本数据类型 Undefined 、Null、Boolen 、Number、 String、Symbol(ES6新增), Object是 复杂数据类型 2:null不是一个对象,通过typeof可以检测是object ,但,它是一个空对象指针,如果一个对象准备保存值时,初始化时最好用null, 另外:undefined派自生于null。 3: 基本数据类型: 1:基本数据类型的值是不可变的 ,改变的是值的指针指向。 2:不可添加属性和值; 3:值存在栈中 4:赋值是简单的赋值 5:比较时候比较的是值的比较

复杂数据类型(引用数据类型): 1:值是可以变的, 2:可以添加属性和值 3:存在堆和栈中,堆存出的是值,栈存储的变量名和堆的引用 4:赋值是对象的引用 5:比较 的时候比较的是对象的引用的比较

Diamondjcx commented 5 years ago

1.JS的基本数据类型:Undefined、Null、Boolean、Number、String

  Undefined类型只有一个值,即特殊的undefined,声明变量但是没有初始化,这个变量的值就是undefined

  Null类型只有一个值null,表示一个空对象指针,正式使用typeof操作符检测null会返回object

  Boolean有两个字面值:true和false

  Number:用来表示整数和浮点数,还有一种特殊的值即NaN,这个数值用来表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)

  String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。

2.三大引用类型

  Object类型

  Array类型

  Function类型

3.区别 存储空间:基本类型存在栈中,引用类型存在栈上

值传递:基本类型传递的是值,引用类型传递的是地址(引用)

作为函数的参数:基本类型传递的是值,引用类型传递得是地址 4.null是对象 指的是空指针。tryeof(null)object

AILINGANGEL commented 5 years ago
  1. JS基本数据类型分为基本类型引用类型

    基本类型有如下几种:

    • null
    • undefined
    • string
    • number
    • boolean
    • symbol 引用类型
    • object
  2. null是对象吗? 虽然typeof null === 'object' 但是null并不是对象,这是一个历史遗留问题,浏览器没有修复。如果使用instanceof 操作符, null instanceof Object 会返回 false

  3. 基本数据类型和复杂类型的区别 基本类型存储在栈内存中,如果把一个基本类型的变量赋值给另一个变量实际上进行的是值拷贝。引用类型的指针(地址)存储在栈内存中,这个指针指向的对象存储在堆内存中,如果进行拷贝拷贝的是栈内存中存储的指针而不是对象真正的值

toyxz commented 5 years ago

JS中基本数据类型有哪几种?null 是对象吗?基本数据和复杂数据类型有什么区别?

JavaScript中类型有8种:

Sybmol表示独一无二的值

BigInt可以表示任意精度的整数,在数字末尾加上一个n表示BigInt类型

const b = 123456789n; 

null

使用typeof可以判断类型,得到的是对应类型的字符串

    typeof undefined == 'undefined' // true
    typeof null == 'object' // true
    typeof '42' == 'string'
    typeof 42 == 'number'
    typeof true == 'boolean'
    typeof Symbol() == 'symbol'

null不是对象,null不是引用类型,虽然

typeof null === 'object'

但是null不是一个对象,仍然是一种基本类型。

基本数据和引用的区别

kaiking01 commented 5 years ago

答一: 5种基本数据类型:Number, String, Boolean, Undefined, Null; 3种引用类型:Array, Object, Function。

答二: Null是空对象,空对象也是对象,永远只有一个值,那就是Null。

答三:区别 基本数据类型之间的赋值,相当拷贝,栈内存中会同时存在两份数据,修改其中任意一个数据,另一个数据不会变化; 引入数据类型之间的赋值,是改变指针的指向,共享一份数据;

gitluck1314 commented 5 years ago

1、JS的基本数据类型有:undefined,null,number,string,Boolean ,Symbol 2、null不是对象。

从逻辑上看,null值表示一个空对象指针,这就是为什么使用typeof操作符检测null值时会返回‘object’的原因,也是JavaScript遗留下来的bug。 而真正的原因是:JS类型值是存在32bit 单元里,为了性能考虑用低位储存了变量的类型信息,其中000表示是Object类型,而null对应机器码的NULL指针,一般全为零,所以typeof(null)为Object。

  null instanceof Object //false

3、基本数据类型和复杂数据类型有什么区别?

yuzhang9804 commented 5 years ago

基本数据类型

复杂数据类型

当我们用 typeof null时, 会输出object, 这是因为在JS 最初的版本中, 000开头代表对象, 而null表示为全0, 所有将其错误的判断为object, 即使后来内部的判断规则改变了, 这个bug 还是流传下来啦

  1. 基本数据类型存储的是值,而复杂数据类型存储的是地址(指针)
  2. 当我们拷贝一个值时, 基本数据类型拷贝的时独立的值, 而复杂数据类型存储的是地址(指针), 这就导致了我们复制的是原来变量的地址(指针), 当我们进行数据修改时, 所有拥有相同地址(指针)的变量的值都会发生改变
  3. typeof 可以正确判断除了null其他的所有基本类型, 而判断复杂数据类型,我们建议使用instanceof
YvetteLau commented 5 years ago

目前,JS原始类型有六种,分别为:

ES10新增了一种基本数据类型:BigInt

复杂数据类型只有一种:

null 不是一个对象,尽管 typeof null 输出的是 object,这是一个历史遗留问题,JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,null 表示为全零,所以将它错误的判断为 object

基本数据类型和复杂数据类型的区别为:

1.内存的分配不同

2.访问机制不同

3.复制变量时不同

let b = {
    age: 10
}

let a = b;
a.age = 20;
console.log(a); //{ age: 20 }

4.参数传递的不同(实参/形参)

函数传参都是按值传递(栈中的存储的内容):基本数据类型,拷贝的是值;复杂数据类型,拷贝的是引用地址

//基本数据类型
let b = 10

function change(info) {
    info=20;
}
//info=b;基本数据类型,拷贝的是值得副本,二者互不干扰
change(b);
console.log(b);//10
//复杂数据类型
let b = {
    age: 10
}

function change(info) {
    info.age = 20;
}
//info=b;根据第三条差异,可以看出,拷贝的是地址的引用,修改互相影响。
change(b);
console.log(b);//{ age: 20 }
MissNanLan commented 5 years ago

A1

基本数据类型

引用数据类型

这道题可以引出另外一个问题,浅拷贝和深拷贝

YvetteLau commented 5 years ago

A1

基本数据类型

  • number
  • string
  • boolean
  • undefined
  • null
  • symbol

引用数据类型

  • function
  • object
  • array

A2

null不是一个对象,它只是用来保存对象,还没有真正的保存值,所以说它是一个空对象指针 即使

typeof null // object

可是它也

typeof []  // object呢

A3

基本数据类型: 存放在栈内存中,它们是按值存放的 引用数据类型: 存放在堆内存当中,它们是按引用地址存放的

这道题可以引出另外一个问题,浅拷贝和深拷贝

O(∩_∩)O哈哈~赞~ 深拷贝和浅拷贝后面的issue中会有~~~ 比如深拷贝和浅拷贝的区别是什么?如果实现一个深拷贝~

TTTTTTTZL commented 5 years ago

以最新ES6标准: 基本类型: String,Number,Boolean,null,undefined,Symbol

typeof null === 'object' ---> null属于对象

此处延伸一下对null的理解: null与undefined相似,表示一个空值,即此处的值为空,调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。

基本类型因数据量小存储于栈中,复杂数据类型因数据量可扩展而存储于堆中。 通常声明的复杂数据类型实际上只是一个指针,相当于宾馆的房间号,仅仅表示该声明指向这个房间。所以会引发浅拷贝/深拷贝的情况,而基本类型不会发生这种情况 ---tl

xyfay536475008 commented 5 years ago

1. 基本数据类型

Number, String, Boolean, Null, Undefined, Symbol

2. null 不是真正意义上的对象或者对象的实例。它只是空指针,它不引用内存地址。

3. 基本数据类型存在栈内存中,传值的时候是拷贝赋值。复杂数据类型由基本数据类型按照一定结构组成,包含数组,对象,函数。他们存在堆内存中,并有一个唯一的16进制地址,他们传值其实是传地址。堆内存不会自动销毁,在被没有引用时,在浏览器空闲时会被浏览器回收。

lqzo commented 5 years ago

JS中基本数据类型

基本数据和复杂数据类型有什么区别?

基本数据类型: 存放在栈内存中,它们是按值存放的 引用数据类型: 存放在堆内存当中,它们是按引用地址存放的 在变量赋值或函数传参时,数据传递的方式会有不同,基本类型是复制一份值进行传递,引用类型则是传递了内存地址。


今天的答案真早啊,给刘小夕打call

darlingyz commented 5 years ago

JS的基本数据类型:null string number Symbol undefined boolean 对象类型 object null 不是对象 检测null 是不是对象 typeof 检测不出来,用instanceof 原因:在JS的最初版本中使用的是32位系统,为了性能考虑使用低位存储变量的类型信息,000开头的是对象,null是全0,所以将null误判为Object了,虽然现在的内部类型判断代码已经改变了,但bug永久的遗留下来了 eg: var srt = null console.log(srt instanceof Object)//false 说明不是对象 基本数据类型和复杂数据类型区别: 基本数据类型把数据名和值直接存储在栈当中, 复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值,访问时先从栈中获取地址,再到堆中拿出相应的值 基本数据类型作为参数时,函数内部对参数值的修改不会改变外部变量的值 因为复杂数据类型赋值是把栈中对象的地址赋给变量,函数内外两个变量指向同一个对象,所以只要对象的属性值改变,两个变量值都会改变 eg: function student(age, name, grade) { this.age = age; this.name = name; this.score = grade; } var s1 = new student(18, "yz", 100);//创建一个student对象 function a(s) { s.name = "hello"; } a(s1)//把s1赋给s console.log(s1.name);//输出hello

-----给小姐姐打call

Timoeser commented 5 years ago

boolean string number null undefined 以及新增的symbol

区别是:基本数据类型存在栈里面,复杂数据存在堆里面,需要访问堆里面的数据,是去栈里面获取地址,根据地址去堆里面查找

humingcong commented 5 years ago

打卡,感谢大佬们的答案,学习了

0uzu0 commented 5 years ago

1.7种语言类型:Number String Boolean Null Undefined Symbol Object 2.null表示空值,null不是一个对象,它只是用来保存对象,还没有真正的保存值,所以说它是一个空对象指针(学习了) 3.基本类型存在栈中,引用类型存在栈上;基本类型传递的是值,引用类型传递的是地址

niebiguang commented 5 years ago

JS中基本数据类型有哪几种? JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object) 基本类型有六种: null,undefined,boolean,number,string,symbol

null 是对象吗? image

基本数据和复杂数据类型有什么区别? 基本数据类型把数据名和值直接存储在栈当中 复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值,访问时先从栈中获取地址,再到堆中拿出相应的值 参考文档:https://www.cnblogs.com/alenhx/p/9048144.html

Liruimin2 commented 5 years ago

1、es5定义了5种基本类型,Null、Undefined、Boolean、String、Number,es6新增了Symbol,复杂数据类型Array,object,function. 2、虽然 typeof null === 'object' 为true,但是null 不是对象,属于基本类型的一种。 3、基本类型的值存储在栈里面,复杂类型的值存储在堆里面。基本类型复制的是值,引用类型复制的是地址。

wubetter commented 5 years ago

基本类型

基本数据类型:number string boolean undefined null Symbol 一共6种,其中 Symbol为ES6新增的基本类型

null是不是对象

null不是一个对象,值null 只是一个字面量,表示一个空对象指针,它不指向任何对象,前面已经有小伙伴说的很详细了,就不再说

基本数据和复杂数据区别

基本数据类型的值存储在栈中,而复杂数据类型(引用类型)在栈中只是保存的一个地址,它真正的值是保存在堆内存中,访问这个数据其实是通过栈中保存的地址去堆中寻找真正的值

var str = '123'; var obj = {name:'zhangsan'} foo(str,obj); console.log(str);//123 console.log(obj);//{name:'lisi'} //函数调用时,实参传递给形参 str->s, obj->o;str为基本类型 传递给o的值就是str的实际值 123,而 obj传递给o的值实际上只是一个空间地址,这个地址指向堆内存的{name:'zhansan'},也就是此时 o 和 obj 指向的是同一个对象


 ### CommonJs 和 ES6 对模块读取操作
 都说 CommonJs 是值得拷贝,而 ES6采用值的引用,下面我们看一个简单的例子
 * CommonJs
 ```js
 //b.js
 let count = 1;
 let obj = {
    name:'zhangsan'
 }
 module.exports = {
    count,
    obj,
    addCount(){
        count++;
    },
    getCount(){
        return count;
    },
    changeObj(){
        obj.name = 'lisi'
    },
    getObj(){
        return obj;
    }
 }
//a.js
const {count,obj,addCount,getCount,changeObj,getObj} = require('./b');
console.log(count);//1
addCount();
console.log(count);//1
console.log(getCount());//2

console.log(obj);//{name:'zhangsan'}
changeObj();
console.log(obj);//{name:'lisi'}
console.log(getObj());//{name:'lisi'}

通过测试可以发现 CommonJS规范 跟上面我们说的基本类按值传递 ,引用类型按地址传递是一致的 所以说 CommonJS 说是按值得拷贝(对于对象拷贝得是指向堆内存中得地址)

export function changeObj(){ obj.name = 'lisi'; } export function getObj(){ return obj; }

```js
//a.js
import {count,obj,addCount,getCount,changeObj,getObj} from './b.js';
console.log(count);//1
addCount();
console.log(count);//2  由于上一步count +1  这里按照引用 打印出来得值为2
console.log(getCount());//2

console.log(obj);//{name: "zhangsan"}
changeObj();
console.log(obj);//{name: "lisi"}
console.log(getObj());//{name: "lisi"}

console.log(getObj() === obj);//true
//count = 33;// error ReferenceError: count is not defined

由此可见 ES6规范 无论是基本类型 还是 引用类型 都是按照值得引用来传递
注意:es6中 引用的变量是只读模式,你不能对他的引用地址重新赋于新的遍历 否则会报错 ReferenceError: count is not defined

jodiezhang commented 5 years ago

JS中的基本数据类型有String,Number,Boolean,Null,Undefined,Symbol var a='Hello'; var a=1.08; var a=true; Undefined表示变量声明了,却没有被赋值 可以通过将变量的值设为null来清空变量

console.log(typeof null);// object

复杂数据类型 Object Array

基本数据类型把变量名和值都存在栈中 复杂数据类型在栈中存储变量名和一个堆的地址,在堆中存储属性名和属性值,访问时先从栈中 取堆的地址,然后在从堆中拿相应的值

基本数据类型 function fn(a){ a='Hello'; return a; } var b='Hi'; console.log(fn(b)); //'Hello' console.log(b);// 'Hi' 基本数据类型当做参数传入函数,原值不会被修改

复杂数据类型 function Person(name,age){ this.name=name; this.age=age; }

var person1=new Person('Jodie','18');

function change(person){ person.name='Jim'; }

change(person1); console.log(person1.name); //'Jim' 复杂数据类型当做参数传入函数,属性值被修改,person1的地址没有被修改,但是person1的值被修改了

Mxuan01 commented 5 years ago
  1. JavaScript基本数据类型有:Undefined, Null, Boolean, Number, String, Symbol
  2. null属于基本数据类型,不是对象
  3. 基本数据类型存储的是值,引用数据类型存储的是地址
tianyuandsb commented 5 years ago
  1. js有5种基本类型 1) undefined, null, number, string, boolean
  2. null 不属于对象, 属于基本类型当中的一种
  3. 基本数据类型属于值的复制 4.复制数据类型属于内存地址的引用
zhmfe commented 5 years ago

1.JS中基本数据类型有哪几种? 最新的 ECMAScript 标准定义了 7 种数据类型: 6种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number、String.Symbol类型(ES6新增) 1种复杂数据类型:Object

主要说一下这两个:

  Unndefined类型:该类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。无论在什么情况下都没有必要把一个变量的值显式地设置为undefined。
   Null类型:该类型同样只有一个值,即null。从逻辑角度来看,null表示一个空指针对象,而这也正式使用typeof操作符检测null值时会返回object的原因。事实上,undefined值是派生自null值的。

2.基本数据和复杂数据类型有什么区别?

基本类型值:指的是保存在栈内存中的简单数据段; 引用类型值(复杂数据类型):指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针指向内存堆中实际的值;

两种访问方式

基本类型值:按值访问,操作的是他们实际保存的值; 引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;

两种类型复制

基本类型变量的复制: 从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上,改变源数据不会影响到新的变量(互不干涉); 引用类型变量的复制: 复制的是存储在栈中的指针,将指针复制到栈中为新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象,复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个;

xtgcs commented 5 years ago

js中基本数据类型有 :string number null undefined boolean 以及es6 中的 Symbol

null 不是对象,需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用

基本数据类型与引用数据类型的区别

基本数据类型是存储在栈内存,存储的是值而复杂数据类型的值存储在堆内存,地址存储在栈内存。当我们把对象赋值给另外一个变量的时候,复制的是地址,指向同一块内存空间,当其中一个对象改变时,另一个对象也会变化。

wangxinyu123 commented 5 years ago

基本数据类型null undefined number string Boolean

null值表示一个空对象指针,它代表的其实就是一个空对象,所以使用typeof操作符检测时返回"object"

基本数据类型把数据名和值直接存储在栈当中 复杂数据类型在栈中存储数据名和一个堆的地址,在堆中存储属性及值,访问时先从栈中获取地址,再到堆中拿出相应的值

zihuasunshine commented 5 years ago

js基本数据类型有undefined、null、Boolean、Number、String,es6新增了基本数据类型Symbol。 null准备用来保存对象,但还未真正保存对象,表示一个空对象指针。 基本数据类型保存在栈内存,做‘=’操作时,是在栈中复制了一个值;复杂数据类型真正的值保存在堆内存,栈内存保存着值的引用。做‘=’操作时,是在栈内存复制了一个引用,所以改变一个复杂类型数据的值时,另一个复制的对象的值也会改变。

web-data-MrLi commented 5 years ago

js的原始数据类型有7种

  1. null undefined string number object boolean Symbol(es6) 2.对于null的理解,typeof的检测是object,但是实际机制不是这样的,是一个假的对象,这是windows机制的问题导致的 3.数据类型中又分基本数据类型和引用数据类型如下; 基本数据类型有 null undefined string number boolean Symbol 引用数据类型 object array和function属于object 注意:两种类型的用途和检测有区别
Nancy0611 commented 5 years ago

基本数据类型

null不是对象

尽管typeof null输出的是object,但这其实是个历史遗留问题,不同的对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判为object类型,null的二进制表示是全0,自然前三位也是0,所以执行typeof时会返回obkect,这个bug是第一版的JavaScript中留下来的。这个版本中,数值是以32字节存储的,由标志位(1-3个字节)和数值组成,000是对象的标志位。

基本数据类型和复杂数据类型的区别

  1. 内存分配不同
    • 基本数据类型存储在栈中
    • 复杂数据类型存储在堆中,栈中存储的是指向内存的引用
  2. 访问机制不同
    • 基本数据类型是按值访问的
    • 复杂数据类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,所以操作对象时实际上是在操作对象的引用而不是实际的对象,所以是按引用访问的
binh123 commented 5 years ago

javascript数据类型及基本类型与复杂类型的区别: 1.值类型(基本类型):undefined、String、Boolean、Number、null(对象)、Symbol

  1. 引用类型(复杂类型 ):Array、Object、Function 3.typeof不能区分引用类型(Function除外),用instanceof来判断 4.NAN是一个特殊的number 5.值类型存储在栈中,引用类型存储在堆中。引用类型作为函数参数时,传递的是内存地址,函数内修改属性的对象是函数外部创建的对象。这是引用类型的本质所在。 `function pInfo(obj){

    obj.name = '深圳'; }

var city = new Object(); city.name = '杭州'; city2 = city; pInfo(city2); console.log(city2); console.log(city); `

wanglinyj commented 5 years ago

基本数据类型:string、boolean、number、null、undefined、symbol(es6)、BigInt(es10) 区别:基本数据类型保存在栈当中,复杂类型数据存放在堆和栈当中,栈当中存放复杂类型数据的地址(指针),堆当中存放复杂类型的值;基本数据类型赋值是值传递,复杂类型数据赋值是地址传递,指向同一块内存空间,所以改变其中一个值时另一个值也会改变 null:typeof null返回Object,会误以为null是对象,这其实是js的一个BUG啦!!!typeof非常善于区分不同类型的原始值,并区分他们和对象,但是在区分不同类型的对象以及null时却完全没用。但是js作为一门强大的语言,Object.protoType.toString.call(null)返回[bject, null]给了我们最终的答案,所以,null不是对象,它只是一个基本数据类型

libraxiang commented 5 years ago

null boolean undefined string number null 不是对象 基本数据是值传递,改变后面的值,不影响前面 复杂数据类型是把前者的地址赋给后者,改变任何一个的值,两个都会一起改变

tangjian1891 commented 5 years ago

1.基本类型6中:string,number,boolean,null,undefined,symbol(es6) 2.引用数据类型:Object 区别:引用数据类型传递的是地址值,指向同一块内存空间。其中一个修改,会影响其他相同指向的对象 基本类型是值传递。互不相干 另外:Object.prototype.toString().call()这个方式可以用来判定对象 typeof null是个bug,返回的Object,实际上null是基本类型。(js底层根据二进制判断,前三位为0则为对象,null全是0.)

noggcool commented 5 years ago

基础数据类型有:string number boolean undefined null symbol null是对象吗?不是,虽然typeof出来是object,其实这是一个遗留下来的bug。js中判断为不同对象的标准是其二进制,而null的前三位二进制都表示为0,而js中前3位是0就判断为对象。而null实际是基础数据类型。 基本数据和复杂数据类型有什么区别?基本数据的复制,是直接开辟新的栈空间,在栈内保存新的值,所以修改复制的后的变量,原变量不会发生改变,虽然原变量不会发生改变,但是属于浅拷贝哦。而复杂数据类型的复制是复制栈地址指向堆值的指针,栈内存存的是地址,值在对内存。所以复制后的变量改变会影响原变量。如果想不改变原变量就需要使用深拷贝。在很多项目中,我们对store里面的数据进行操作,都会将对象的值通过如Object.assign的方式来复制一份来操作,这样的操作一般就是深拷贝

coloryjl commented 5 years ago

1、基本数据类型:string、null、boolean、undefined、number、symbol 2、null不是对象 3、基本数据类型存在栈中,复杂数据类型存在堆中。