찾다
웹 프론트엔드JS 튜토리얼js의 기본 유형 및 참조 유형
js의 기본 유형 및 참조 유형Apr 10, 2018 pm 02:10 PM
javascript인용하다유형

이 글에서 공유한 내용은 js의 기본 유형과 참조 유형에 관한 것입니다. 특정 참조 값이 있습니다. 필요한 친구가 참조할 수 있습니다.


js의 기본 유형 및 참조 유형


https://blog.csdn.net/shuidinaozhongyan/article/details/72520842에서 재인쇄됨

기본 유형: 숫자, 문자열, 부울, Null, 정의되지 않음.

참조 유형: Object, Array, Date, RegExp, Function

null과 정의되지 않음의 차이.

참조: http://www.ruanyifeng.com/blog/2014/03/undefine-vs-null.html

1. 유사성

1. 솔직히 거의 차이가 없습니다.

var a=null;  
var b=undefined;

2. 정의되지 않음과 null은 if 문에서 자동으로 false로 변환되며, 동등 연산자는 둘이 동일하다고 직접 보고합니다.

if (!undefined) 
    console.log('undefined is false');// undefined is falseif (!null) 
    console.log(&#39;null is false&#39;);// null is falseundefined == null// true<span style="font-family:Georgia, serif;color:#111111;"><span style="font-size:16px;letter-spacing:-.12px;word-spacing:2.4px;background-color:rgb(245,245,213);"><strong>
</strong></span></span>

위 코드는 둘의 행동이 얼마나 유사한지 보여줍니다!

undefine과 null의 의미와 사용법이 비슷한데 왜 두 개의 값을 동시에 설정해야 할까요? 이렇게 하면 이유 없이 JavaScript의 복잡성이 증가하고 초보자에게 문제가 되지 않나요? Google이 개발한 JavaScript 언어를 대체하는 Dart 언어는 null만 있고 정의되지 않은 것은 없음을 명확하게 규정합니다!

2.

최근 신간 "자바스크립트를 말하다"를 읽다가 우연히 이 질문에 대한 답을 발견했습니다!

알고 보니 이는 JavaScript의 역사와 관련이 있습니다. 1995년 자바스크립트가 탄생할 당시에는 처음에는 자바와 마찬가지로 "nothing"을 나타내는 값으로 null만 설정되었습니다.

C 언어의 전통에 따르면 null은 자동으로 0으로 변환되도록 설계되었습니다.

Number(null)// 05 + null// 5

그러나 JavaScript 디자이너인 Brendan Eich는 두 가지 이유로 이것만으로는 충분하지 않다고 생각합니다.

우선 null은 Java와 마찬가지로 객체로 취급됩니다. 그러나 JavaScript 데이터 유형은 기본 유형(primitive)과 복합 유형(complex)의 두 가지 범주로 나뉩니다. Brendan Eich는 "없음"을 나타내는 값이 객체가 아닌 것이 가장 좋다고 생각합니다.

두 번째로, JavaScript의 초기 버전에는 오류 처리 메커니즘이 포함되어 있지 않았습니다. 데이터 유형 불일치가 발생하면 유형이 자동으로 변환되거나 자동으로 실패하는 경우가 많습니다. Brendan Eich는 null이 자동으로 0으로 변환되면 오류를 찾기가 어려울 것이라고 생각합니다.

그래서 Brendan Eich는 또 다른 undefine을 디자인했습니다.

3. 초기 디자인 JavaScript의 초기 버전은 다음과 같이 구별됩니다. null은 "없음"을 나타내는 개체이며 숫자 값으로 변환되면 0이 됩니다. NaN으로 변환됩니다.

Number(undefined)// NaN5 + undefined// NaN

4. 현재 사용법 그러나 위의 구분은 실제로 실행 불가능하다는 것이 곧 입증되었습니다. 현재 null과 정의되지 않음은 기본적으로 동의어이며 약간의 차이점만 있습니다.

null은 "개체 없음"을 의미합니다. 즉, 거기에 값이 없어야 합니다. 일반적인 사용법은 다음과 같습니다.

(1) 함수의 매개변수로, 함수의 매개변수가 객체가 아님을 나타냅니다.

(2)는 객체 프로토타입 체인의 끝점 역할을 합니다.

Object.getPrototypeOf(Object.prototype)

// null

undefound는 "누락된 값"을 의미합니다. 즉, 여기에 값이 있어야 하지만 아직 정의되지 않았음을 의미합니다. 일반적인 사용법은 다음과 같습니다.

(1) 변수가 선언되었지만 값이 할당되지 않은 경우 정의되지 않은 것과 같습니다.

(2) 함수 호출시 제공해야 할 매개변수가 제공되지 않았으며, 매개변수가 정의되지 않음과 동일합니다.

(3) 개체에 할당된 속성이 없으며 이 속성의 값이 정의되지 않습니다.

(4) 함수가 값을 반환하지 않으면 기본적으로 정의되지 않은 값을 반환합니다.

var i;
i // undefinedfunction f(x){console.log(x)}
f() // undefinedvar  o = new Object();
o.p // undefinedvar x = f();
x // undefined

객체는 참조 유형인가요?

 Object是一个基础类型,其他所有类型都从Object继承了基本行为。比如原型链中它的原型为null。
참조형과 기본형의 차이점은 무엇인가요? 어느 것이 힙에 있고 어느 것이 스택에 있습니까?

1. 기본형 변수는 스택 영역에 저장됩니다. (스택 영역은 메모리에 있는 스택 메모리를 말합니다.)

그러면 저장 구조는 다음과 같습니다.

js의 기본 유형 및 참조 유형

스택 영역에는 변수 식별자가 포함됩니다. 및 변수의 값.

2.

Javascript는 다른 언어와 다르게 메모리 위치에 직접 접근하는 것을 허용하지 않습니다. 즉, 객체의 메모리 공간을 직접 조작할 수 없다는 뜻입니다. 실제로 이는 운영 개체에 대한 참조이므로

참조 유형의 값은 참조로 액세스됩니다.
정확히 말하면 참조 유형을 저장하려면 메모리의 스택 영역과 힙 영역이 필요합니다(힙 영역은 메모리 내의 힙 메모리를 나타냄). 스택 영역 메모리는 변수 식별자와 객체에 대한 포인터를 저장합니다.
또한 힙 메모리에 있는 객체의 주소라고 할 수 있습니다.
다음과 같은 개체가 있다고 가정합니다.

var person1 = {name:&#39;jozo&#39;};var person2 = {name:&#39;xiaom&#39;};var person3 = {name:&#39;xiaoq&#39;};

그러면 이 세 개체의 메모리 저장 상황은 다음과 같습니다.

js의 기본 유형 및 참조 유형

js의 기본 유형 및 참조 유형

Reprinted from https://blog.csdn .net /shuidinaozhongyan/article/details/72520842

기본 유형: 숫자, 문자열, 부울, Null, 정의되지 않음.

참조 유형: Object, Array, Date, RegExp, Function

null과 정의되지 않음의 차이.

참조: http://www.ruanyifeng.com/blog/2014/03/undefine-vs-null.html

1. 유사성

1.在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。

var a=null;  
var b=undefined;

2.undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。

if (!undefined) 
    console.log(&#39;undefined is false&#39;);// undefined is falseif (!null) 
    console.log(&#39;null is false&#39;);// null is falseundefined == null// true<span style="font-family:Georgia, serif;color:#111111;"><span style="font-size:16px;letter-spacing:-.12px;word-spacing:2.4px;background-color:rgb(245,245,213);"><strong>
</strong></span></span>

上面代码说明,两者的行为是何等相似!

既然undefined和null的含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加JavaScript的复杂度,令初学者困扰吗?Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined!

二、

最近,我在读新书《Speaking JavaScript》时,意外发现了这个问题的答案!

原来,这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。

根据C语言的传统,null被设计成可以自动转为0。

Number(null)// 05 + null// 5

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示”无”的值最好不是对象。

其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。

三、最初设计
JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。

Number(undefined)// NaN5 + undefined// NaN

四、目前的用法
但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。

null表示”没有对象”,即该处不应该有值。典型用法是:

(1) 作为函数的参数,表示该函数的参数不是对象。

(2) 作为对象原型链的终点。

Object.getPrototypeOf(Object.prototype)
// null

undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

var i;
i // undefinedfunction f(x){console.log(x)}
f() // undefinedvar  o = new Object();
o.p // undefinedvar x = f();
x // undefined

Object是引用类型嘛?

 Object是一个基础类型,其他所有类型都从Object继承了基本行为。比如原型链中它的原型为null。

引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?

1.基本类型的变量是存放在栈区的(栈区指内存里的栈内存)

那么它的存储结构如下图:

js의 기본 유형 및 참조 유형

栈区包括了 变量的标识符和变量的值。

2.

javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,
所以引用类型的值是按引用访问的。
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,
也可以说是该对象在堆内存的地址。
假如有以下几个对象:

var person1 = {name:&#39;jozo&#39;};var person2 = {name:&#39;xiaom&#39;};var person3 = {name:&#39;xiaoq&#39;};

则这三个对象的在内存中保存的情况如下图:

js의 기본 유형 및 참조 유형

相关推荐:

JS引用类型的介绍

위 내용은 js의 기본 유형 및 참조 유형의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경