この記事で共有する内容は、js の基本型と参照型に関するもので、必要な友達は参照できます
基本型:数値、文字列、ブール、Null、未定義。
参照型: オブジェクト、配列、日付、RegExp、関数
参考: http://www.ruanyifeng.com/blog/2014/03/undefine-vs-null.html
1. JavaScript では、変数を未定義または null に代入します。正直言って、ほとんど違いはありません。
var a=null; var b=undefined;
2. if ステートメントでは、unknown と null は自動的に false に変換され、等価演算子はそれらが等しいことを直接報告します。 if (!undefined)
console.log('undefined is false');// undefined is falseif (!null)
console.log('null is false');// 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>
上記のコードは、2 つの動作がいかに似ているかを示しています。
未定義と null の意味と使い方は似ているのに、なぜこのような値を 2 つ同時に設定する必要があるのでしょうか?これは理由もなく JavaScript の複雑さを増し、初心者を悩ませませんか? Google が開発した JavaScript 言語の代替である Dart 言語では、null のみが存在し、未定義は存在しないと明確に規定されています。
2.最近、新しい本「Speaking JavaScript」を読んでいたとき、この質問に対する答えを偶然発見しました。
結局のところ、これは JavaScript の歴史に関係しているようです。 JavaScript が 1995 年に誕生したとき、Java と同様に、当初は「何もない」ことを表す値として null が設定されるだけでした。 C言語の伝統に従って、nullは自動的に0に変換されるように設計されています。
Number(null)// 05 + null// 5
しかし、JavaScript の設計者であるブレンダン・アイヒ氏は、2 つの理由から、これでは十分ではないと感じています。
まず、nullはJavaと同じようにオブジェクトとして扱われます。ただし、JavaScript のデータ型は、プリミティブ型 (プリミティブ) と複合型 (コンプレックス) の 2 つのカテゴリに分類されます。ブレンダン アイヒ氏は、「なし」を表す値はオブジェクトではない方がよいと考えています。
第 2 に、JavaScript の初期バージョンにはエラー処理メカニズムが含まれておらず、データ型の不一致が発生すると、型が自動的に変換されるか、警告なしに失敗することがよくあります。 Brendan Aich は、null が自動的に 0 に変換されると、エラーを見つけるのが難しくなると感じています。
それで、ブレンダン・アイヒは別の未定義のものをデザインしました。
3. 初期設計JavaScript の初期バージョンは次のように区別されます。null は「なし」を表すオブジェクトであり、数値に変換すると 0 になります。未定義は「なし」を表すプリミティブ値であり、数値に変換するとNaNになります。
Number(undefined)// NaN5 + undefined// NaN4. 現在の使用法
しかし、上記の区別は実際には不可能であることがすぐに判明しました。現在、null と unknown は基本的に同義ですが、いくつかの微妙な違いがあります。
null は「オブジェクトがない」ことを意味します。つまり、そこに値があってはなりません。一般的な使用法は次のとおりです:
(1) 関数のパラメーターとして、関数のパラメーターがオブジェクトではないことを示します。 (2) は、オブジェクト プロトタイプ チェーンのエンドポイントとして機能します。
// null
未定義は「値が欠落している」という意味で、ここには値があるはずですが、まだ定義されていないことを意味します。一般的な使用法は次のとおりです:
(1) 変数が宣言されていても値が割り当てられていない場合、その変数は未定義と等しくなります。
(2) 関数呼び出し時に、提供されるべきパラメータが提供されず、パラメータが未定義に等しい。
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. 基本型変数はスタック領域に格納されます(スタック領域とはメモリ内のスタックメモリを指します)
その格納構造は次のようになります:スタック領域には変数識別子が含まれますおよび 変数の値。
2.正確には、参照型の格納にはメモリのスタック領域とヒープ領域が必要です(ヒープ領域とはメモリ内のヒープメモリのことを指します) スタック領域のメモリには変数識別子とオブジェクトへのポインタが格納されます。
ヒープメモリ内のオブジェクトのアドレスとも言えます。以下のオブジェクトがあるとします: var person1 = {name:'jozo'};var person2 = {name:'xiaom'};var person3 = {name:'xiaoq'};
すると、これら3つのオブジェクトのメモリ上の格納状況は以下のようになります:
jsの基本型と参照型
基本タイプ: 数値、文字列、ブール値、Null、未定義。
参照タイプ: オブジェクト、配列、日付、RegExp、関数
1.在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。
var a=null; var b=undefined;
2.undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。
if (!undefined) console.log('undefined is false');// undefined is falseif (!null) console.log('null is false');// 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.基本类型的变量是存放在栈区的(栈区指内存里的栈内存)
那么它的存储结构如下图:
栈区包括了 变量的标识符和变量的值。
2.
javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,
所以引用类型的值是按引用访问的。
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,
也可以说是该对象在堆内存的地址。
假如有以下几个对象:
var person1 = {name:'jozo'};var person2 = {name:'xiaom'};var person3 = {name:'xiaoq'};
则这三个对象的在内存中保存的情况如下图:
相关推荐:
以上がjsの基本型と参照型の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック



