目次
組み込み型
typeof演算子
値と型
typeof undeclared
总结
ホームページ ウェブフロントエンド jsチュートリアル JavaScript の 7 つの値の型と typeof 演算子

JavaScript の 7 つの値の型と typeof 演算子

Feb 28, 2017 pm 02:34 PM
javascript typeof オペレーター

JavaScriptを基礎から復習する予定です

ちなみに、私が学んだことをシェアしてまとめておきます


組み込み型

JavaScriptには7つの組み込み型があり、そのうち6つの基本型と1 つの参照型

  • 基本型

    • number (数値)

    • string (文字列)

    • boolean (ブール値)

    • unknown (未定義)

    • null (ヌル)

    • シンボル (シンボル) [ES6 新しい仕様]

  • 参照型

    • オブジェクト (オブジェクト)

注: 配列 array と function function は特別なオブジェクトであり、オブジェクトであることを意味します「サブタイプ」も参照値です

基本型は、メモリ内に固定領域を持つスタックメモリに保存された単純なデータセグメントです
参照型は、ヒープメモリに保存され、参照によってアクセスされ、保存されるオブジェクトですスタックメモリ内 オブジェクトへのポインタ(オブジェクトのアクセスアドレスを格納)
スタックがメモリに分割される理由は、実行時に占有されるメモリを最小限に抑えるためのブラウザのガベージコレクションメカニズムに関連しているためです
基本型がスタックデータで、参照型がヒープデータであることを知っていれば、上記の言葉が理解できなくても問題ありません。

typeof演算子

はtypeof演算子とも呼ばれます。演算子は同じものを指します
この typeof we を通じて値の type を確認できます
type の文字列 (英語の小文字) を返しますが、すべての型を識別できるわけではありません

console.log(typeof 123);
// "number"console.log(typeof '123');
// "string"console.log(typeof true);
// "boolean"console.log(typeof undefined);
// "undefined"console.log(typeof Symbol());
// "symbol"console.log(typeof null);
// "object"  <-注意看这里console.log(typeof {demo: 123});
// "object"
ログイン後にコピー

これら 7 つの型をコンソールに出力しましたそして問題が見つかりました
typeof null は実際には "object" を返しました
まあ、それは私たちが期待していたものではありません
"null" を返すことが約束されていました
実際、これは歴史的な問題であり、このバグは 20 年以上存在しています (古いものです)。私より)
おそらく修正されることはありません。あまりにも多くの Web システムが関係しており、「修正」のコストは想像を絶するからです


しかし、この方法で null 値の型を判断できます

var foo = null;if(!foo && typeof foo === &#39;object&#39;){    console.log(&#39;这是一个空值...&#39;);
}
ログイン後にコピー

なぜなら、オブジェクトが何であっても、空のオブジェクトの場合、ブール値 true に変換されます (後で型変換を書くときに説明します)
このようにして null を判定することができますが、私はそれを使用していないようです


元に戻るtypeof の問題に加えて、問題も見つかりました

console.log(typeof function(){});// "function"
ログイン後にコピー

typeof には JavaScript のファーストクラスに問題があります。 Citizens - 実行可能オブジェクト - 関数は特別な扱いを受けています
そのため、関数はオブジェクトですが、typeof 演算子は区別して「関数」を返すことができます
なぜ関数が呼び出せるのかというと、内部属性 [[call]] があるからで、「呼び出し可能なオブジェクト」なので、それについては後ほどお話します
ところで、配列も特殊なオブジェクトですが、 typeof はそれらを認識しません
配列を区別したい場合は、配列の識別方法について私が書いたものを読むことができます
したがって、typeof の戻り値は次の String
数値、文字列、ブール値、未定義、オブジェクト、関数になります, 記号


typeofについて話しているところで、もう一つ豆知識があります

console.log(typeof NaN)// "number"
ログイン後にコピー

また間違いやすいです、面接で質問される可能性もあります
でもこれはバグではありません
NaNは英語です数字ではありません「数値ではありません」
つまり、数値ではない数値は数値です
それを知らなくても問題ありません
ここで、NaN は数値型であることを覚えておいてください


ああ、そうです
typeof は次のように使用できますtypeof(a + b)
しかし、それは関数ではありません、関数ではありません、関数ではありません (重要なことを 3 回言います)
しかし単項演算子です、覚えておいてください
上記の使用法は次の場合にのみ使用されます式のオペランド 演算結果の型チェック

値と型

ここではそんな問題について解説します
JavaScriptでは変数に型はなく、値のみが型を持ちます
typeof演算子は次の文字列も返します変数が保持する値の型
私たちは弱い型付け言語
なので、変数が保持する値の型を変更できます

var foo = 123;console.log(typeof foo);
// "number"foo = true;console.log(typeof foo);
// "boolean"foo = &#39;abc&#39;;console.log(typeof foo);
// "string"
ログイン後にコピー

変数の値の型は変更できますが、記述するときにこれを行ってはなりませんプロジェクト
変数にプレフィックスや特殊記号を追加して、宣言している変数のタイプを覚えておくことができます
たとえば、retArr、bFlag、strLen などです。

typeof undeclared

もちろん、undeclared は宣言されていないキーワードです。存在します
でも、なぜこのように書かなければならないのでしょうか
質問を見てみましょう

console.log(foo);
ログイン後にコピー

我没定义foo就打印,于是
JavaScript の 7 つの値の型と typeof 演算子
果不其然,浏览器蒙圈了
给大家翻译成中文:未捕获引用错误: foo没有定义
可能大家都不会去注意,其实这是很容易让人误会的
在这了 is not defined != is undefind
因为我连声明都没声明,怎么谈定义
所以如果浏览器报出is not declared或许更准确
我们暂且把这种连定义都没定义的变量看作“undeclared”变量
但是对于这种“undeclared”未定义的变量,typeof有特殊的安全防范机制

console.log(typeof foo);// "undefined"
ログイン後にコピー

出乎意料的,它对于undeclared变量并没有报错,而是返回了“undefined”
虽然我们觉得它返回“undeclared”更容易理解一些(我们的要求太高了)
其实它没有报错就相当不错了
这种容错对于我们来说还是很有帮助的
比如说我们想知道全局空间有没有变量foo

if(foo){  //若不存在会报错
    //...}if(typeof foo !== &#39;undefined&#39;){  //不存在也不会报错
    //...}if(window.foo){  //不存在同样不会报错
    //...}
ログイン後にコピー

最后一种通过window对象调用与undeclared变量不同
访问不存在的对象属性是不会报错的,而是返回undefined(是类型而不是字符串)
不过如果我们全局对象不是window的话,就不能使用这种方法了(比如,node.js)

总结

JavaScript内置类型:

  • 基本类型(栈数据):number、string、boolean、undefined、null、object、symbol(ES6规范新增)

  • 引用类型(堆数据):object

typeof操作符返回值:

  • “number”

  • “string”

  • “boolean”

  • “undefined”

  • “object”

  • “function”【sp】

  • “symbol”

typeof null -> “object” 历史遗留bug

typeof NaN -> ‘number’ 注意

变量没有类型,其持有值有类型

typeof的容错机制可以用来检查undeclared(未声明)变量

 以上就是JavaScript中的七种值类型与typeof运算符的内容,更多相关内容请关注PHP中文网(www.php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

C言語における+=演算子の意味と使い方の解析 C言語における+=演算子の意味と使い方の解析 Apr 03, 2024 pm 02:27 PM

+= 演算子は、左オペランドの値を右オペランドの値に加算し、その結果を左オペランドに割り当てるために使用されます。これは数値型に適しており、左オペランドは書き込み可能である必要があります。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

Python 構文のマインド マップ: コード構造の深い理解 Python 構文のマインド マップ: コード構造の深い理解 Feb 21, 2024 am 09:00 AM

Pythonはそのシンプルで読みやすい構文から幅広い分野で広く使われています。プログラミングの効率を向上させ、コードがどのように機能するかを深く理解するためには、Python 構文の基本構造をマスターすることが重要です。この目的を達成するために、この記事では、Python 構文のさまざまな側面を詳しく説明した包括的なマインド マップを提供します。変数とデータ型 変数は、Python でデータを保存するために使用されるコンテナです。マインド マップには、整数、浮動小数点数、文字列、ブール値、リストなどの一般的な Python データ型が表示されます。各データ型には独自の特性と操作方法があります。演算子 演算子は、データ型に対してさまざまな操作を実行するために使用されます。マインド マップは、算術演算子、比率など、Python のさまざまな演算子の種類をカバーしています。

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

Python オペレーター: 初心者からマスターまでの究極のガイド Python オペレーター: 初心者からマスターまでの究極のガイド Mar 11, 2024 am 09:13 AM

Python 演算子の概要 演算子は、2 つ以上のオペランド間の演算を実行するために使用される特殊な記号またはキーワードです。 Python には、基本的な数学演算から複雑なデータ操作まで、幅広い用途をカバーするさまざまな演算子が用意されています。数学演算子 数学演算子は、一般的な数学演算を実行するために使用されます。演算子の演算例 + 加算 a + b - 減算 a-b * 乗算 a * b / 除算 a / b % モジュロ演算 (剰余を取る) a % b ** べき乗演算 a ** b // 整数除算 (剰余) a//b 論理演算子 論理演算子は、ブール値を連結し、条件を評価するために使用されます。これらには、演算子の演算例と、論理演算と aandbor 論理演算、または aorbnot 論理演算の not not 比較演算が含まれます。

See all articles