処理タイプ

5419 ワード

タイプチェック


type of演算子は、右側の被演算子を計算し、対応する結果値を文字列に返します.
JavaScriptからtypeofまで、すべてのタイプのチェックは簡単ではないでしょうか.
-> NO
->Primitiveタイプでは、typeofでReferenceタイプをチェックするのは難しいです.
もちろん,関数に対しては正常にタイプチェックができるので問題ないと考えられる.
function myFunc() {}
typeof myFunc 
// 'function'
そしてnullも問題になります.
typeof null
// 'object'
//  null의 타입을 객체로 인식한다
(nullは元のタイプの1つではありませんか?nullがオブジェクトとしてタイプ評価されている理由を知りたいです.)
->JavaScriptの初期バージョンのバグの1つです.
->typeofロジックを実装するコードにnull typeをチェックするコードが欠けているため、このような状況が発生します.
->これは明らかな誤りで、認識は長い間続いていますが、なぜまだ修正されていないのでしょうか.
->修正勧告があり、V 8でも適用されるが、再度拒否され、修正事項も戻される.
どうして?既存の多くのウェブサイトは既存のtypeof論理に基づいて実現されているため、V 8でこの部分を修正し、多くのウェブサイトの運営に影響を及ぼしている.これは「javascript」の精神に合わないため、修正を拒否します.
inconceof演算子?
  • オブジェクトのプロトコルチェーンをチェックする演算子
  • // instanceof 사용의 예시
    
    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    
    const Messi = new Person('Messi', 38);
    
    const Fred = {
      name: 'Fred',
      age: 42
    }
    
    Messi instanceof Person
    // true
    
    Fred instanceof Person
    // false
    
    しかしinstanceofには少し注意が必要です.
    // instanceof의 함정
    
    const arr = []
    
    const func = function() {}
    
    const date = new Date()
    
    arr instanceof Array
    // true
    
    func instanceof Function
    // true
    
    date instanceof Date
    //true
    
    // 사실 이렇게만 보면, reference 객체에 대해서도 타입검사가 잘 된다고 생각할 수 있다.
    // 하지만 다음 코드를 보자..
    
    arr instanceof Object 
    // true
    
    func instanceof Object
    // true
    
    date instanceof Date
    // true
    
    // 결국 reference type 이기 때문에 최상위는 Object이고, 프로토타입 체인을 따라가다 보면 최상위에 Object 가 있다.
    // 이래서 타입검사는 참 어렵다..
    このようにjavascriptではタイプチェックが難しく、頭痛を引き起こす.
    タイプチェックをするためには、Googleを使う必要があります.(?やっぱりスタックオーバーフロー…)
    またjavascriptはダイナミックタイプの言語なので、常に注意して使用してください.(ツールの長所と短所と限界を理解してこそ、よりよく使用することができます.)