JavaScriptで空白を表すunknownとnullの違いと使い方

黄舟
リリース: 2017-02-28 14:50:15
オリジナル
1877 人が閲覧しました

私が初めて JavaScript を学び始めたとき

私は、未定義は非常に新しいものだと感じました
他の言語にはそれがなかったので
、それは未定義があるだけでなく、実際には空を意味する null があったのです
多くの人がそう信じています学生は unknown と null の違いがわかりません
今日は、JavaScript で空のスペースを表す unknown と null の違いをまとめます

同様のものです

unknown と null は JavaScript の基本型であり、それぞれの型値は 1 つだけです
、つまり、型と同じ名前を持つ未定義と null です
通常、これら 2 つの値の間に実際には違いはありません

var foo = undefined;
ログイン後にコピー
var foo = null;
ログイン後にコピー

そして標準にもそのような規定があります

console.log(null == undefined) // true
ログイン後にコピー

(ただし、null != = 未定義)null !== undefined

转化为布尔值都是false

if(!undefined){
    console.log(1);//1}if(!null){
    console.log(1);//1}
ログイン後にコピー

区别

但其实,有区别
先来看看这几行代码

console.log(undefined in window);// trueconsole.log(null in window);// false
ログイン後にコピー

这是其中不同的一点
null是JavaScript的关键字
而undefined是window上的一个特殊的的属性(和NaN、Infinity一样)
虽然ES5undefined变为只读属性,但是仍然有不合理的地方,比如说这样

function fn(){
    var undefined = 1;// 注意:前方高能
    console.log(undefined);// 1}
fn();
ログイン後にコピー

看吧,因为undefined不是关键字,所以我们可以在局部变量中声明undefined(简直无语)
即便你是严格模式

function fn(){    "use strict";    var undefined = 1;
    console.log(undefined);// 1}
fn();
ログイン後にコピー

我们可千万不要写这么令人发指的代码

在进行数学运算时也存在差别

console.log(undefined + 1); //NaNconsole.log(null + 1); //1
ログイン後にコピー

undefined进行任何运算会转换为NaN
而null转换为0

历史

JavaScript有两种表示空的值是有道理的
js之父Brendan Eich最开始设计得时候像Java一样,只有null
但是他考虑到js有基本值和引用值两种
用一个对象来表示空怪怪的typeof null === 'object',而且null转化为数字0导致很多bug不好找
于是他又设计了undefined

用法

按照js之父的设计
undefined表示缺少值
null表示为空对象
但是现在我们并不是这样使用的

可以这样来理解
undefined表示变量没有初始化,没有值
null表示变量初始化了,值为“空值”

undefined是js用的,而null是给我们用的
这句话不知道大家能不能理解
比如在这些情况

  • var a; 声明变量,引擎会在预编译给它赋上默认值undefined

  • function a(){} 声明函数,没有返回值默认返回undefined

  • var obj = {};obj.a; 访问不存在的对象属性,默认值undefined

  • var a = function(a){};a(); 没有指定实参,默认参数值undefined

  • ……

这都是系统给我们默认的undefined,也就是js使用的
而我们要用的是null
比如说

  • var obj = Object.create(null); 创建空对象

  • demo.onclick = null;

    ブール値に変換するのは false
  • rrreee
  • 違い

    しかし、実際には違いがあります
  • 最初にこれらのコード行を見てみましょう
rrreee

これが違いです

null はJavaScript のキーワード

かつ、unknown は window 上の特殊な属性です (NaN や Infinity と同じ)

ES5 の unknown は読み取り専用属性になりますが、このような不合理な点はまだあります

rrreee

見てください、unknown は aN ではないからですキーワードを指定すると、ローカル変数で未定義を宣言できます(単純にSpeechless)
    厳密モードであっても
  • rrreee

    そのようなとんでもないコードを書いてはいけません

  • 数学的な演算を行う場合にも違いがあります
  • rrreee

    unknownはに変換されますあらゆる操作に対して NaN が使用されます

    、null は 0 に変換されます
  • 歴史

    JavaScript には null を表す 2 種類の値があることは理にかなっています
  • js の父であるブレンダン・アイヒは、もともと Java のようにそれを設計しましたが、null のみです
  • しかし彼は、js には基本値と参照値の 2 種類があると考えました

    オブジェクトは奇妙な typeof null === 'object' を表し、null は数値 0 に変換されます。見つけるのが難しい多くのバグ

    そこで彼は未定義を設計しました
  • 使用法

    jsによると、父親の設計
  • 未定義は値の欠如を意味します
  • nullは空のオブジェクトを意味します

    しかし、私たちは今このようにそれを使用しません

  • このように理解できます
  • 未定義は変数が初期化されておらず、値がないことを意味します

    nullは変数が初期化されていて値が「空」であることを意味します

  • 未定義はjsで使用され、nullはusで使用されます
Iこの文を理解できるか分かりません

例えば、こんな状況です


var a;で変数を宣言すると、エンジンにはデフォルト値unknownが代入されます

🎜🎜🎜プリコンパイル中に関数 a(){} を実行します。戻り値がない場合は、デフォルトで未定義が返されます🎜🎜🎜🎜var obj = {}; にアクセスします。存在しないオブジェクトのプロパティ、デフォルト値は未定義です🎜🎜🎜🎜var a = function(a){};a(); 実際のパラメータは指定されていません、デフォルトのパラメータ値は未定義です🎜🎜🎜🎜 ......🎜🎜🎜🎜これはシステムによって与えられるデフォルトの未定義であり、js が使用するものです🎜そして、使用したいのは null です🎜たとえば🎜🎜🎜🎜var obj = Object .create(null); 空のオブジェクトを作成します🎜🎜🎜🎜demo.onclick = null; イベントのバインドを解除します🎜🎜🎜🎜……🎜🎜🎜🎜 null を使用することは間違いなく正しいことです。場合によっては、ブラウザのガベージ コレクションも容易になります。値を割り当てる; null は識別子ではなく、値を割り当てることはできません🎜🎜🎜🎜未定義 == = null –> false🎜🎜🎜 NaN、null は数値に変換され 0 になります🎜🎜 🎜🎜未定義とブール値に変換された null は両方とも false🎜🎜🎜🎜未定義は値がないことを意味し、null は空の値を意味します🎜🎜🎜🎜空を意味するのではなく、null を使用する必要がありますunknown🎜🎜🎜🎜 undefine を再定義しないでください🎜🎜🎜 🎜 上記は、JavaScript における unknown と null の違いと使用法です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。 🎜🎜🎜🎜🎜
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!