国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 中的類型判斷

ChanceWong / 2569人閱讀

摘要:和這三種基本的數據類型,都有對應的引用包裝類型和。應用于引用類型的判斷,所以對于這三類基本類型沒有什么意義。

JS 中的類型判斷 js中的數據類型

基本數據類型

undefined、number、string、boolean

引用數據類型

null、Object、Number、String、Boolean、Function、Array、Date、RegExp、Error、Arguments

typeof

typeof操作符可能返回下面幾種字符串

"undefined" 如果這個值未定義

"boolean" 如果這個值是布爾值

"string" 如果這個值是字符串

"number" 如果這個值是數值,注意其中NaN 返回的也是"number"

"function" 如果這個值是函數

"object" 如果這個值是對象或者是null

undefined boolean string number 都是基本的數據類型
function 和 object是引用類型,變量指向的是對象的地址,
對于引用類型的變量,typeof只可以區分出function,其他類型的統一識別成object。

boolean string 和number這三種基本的數據類型,都有對應的引用包裝類型
Boolean String 和Number。

對于這些包裝類型的變量,typeof統一識別成object

var a = new String("hello");
typeof a // object
var b = "hello";
a === b // false
a ==b //true
a 實際變成了一個String類型的引用變量
所以a === b 是false,但是用== 比較的時候 b隱式調用了toString的方法 所以是true


多說一句,其實我們在調用基本類型的方法的時候,都是隱式的轉為包裝對象以后才能調用。

instanceof

instanceof 應用于引用類型的判斷,所以對于string number boolean 這三類基本類型沒有什么意義。
instanceof 支持繼承 因為所有的引用類型都繼承自Object,所以所有引用變量都是Object的實例

var a = new String("hello");
a instanceof String  //true
a instanceof Object  //true
var b = "hello";
b instanceof String  // false

我開始以為instanceof是通過判斷a的__proto__ 上的constructor 屬性來判斷構造函數的類型,但是改變a.__proto__.constructor = Number 之后
a instanceof String 仍然為true

var a = new String("hello");
a.__proto__.constructor = Number;
a instanceof String  //true
a instanceof Number  //false
Object.prototype.toString.call()

這個是通過調用Object原型上的toString方法來判斷變量的類型
這個方法不會區分是基本類型還是包裝的引用類型,其實大多數情況下我們真不不需要區分。

var a = new String("hello")
var b = "hello";
Object.prototype.toString.call(a)  //"[object String]"
Object.prototype.toString.call(b)  //"[object String]"

該方法還能夠區分null和undefined

Object.prototype.toString.call(null)  //"[object Null]"
Object.prototype.toString.call(undefined)  //"[object Undefined]"

所以判斷數據類型最靠譜的方法就是這個了。

underscore 中的實現
//代碼中的toString 方法 就是Object.prototype.toString
// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
  _.each(["Arguments","Function", "String", "Number", "Date", "RegExp", "Error"], function(name) {
    _["is" + name] = function(obj) {
      return toString.call(obj) === "[object " + name + "]";
    };
  });
  
  _.isBoolean = function(obj) {
    return obj === true || obj === false || toString.call(obj) === "[object Boolean]";
  };
  
雖然這個方法很好但是沒有辦法區分基本類型和引用類型,采用typeof可以判斷:
    // 判斷是否是引用類型
    _.isObject = function(obj) {
    var type = typeof obj;
    return type === "function" || type === "object" && !!obj;
    };

    //通過instanceof Object  應該也可以判斷 是不是引用類型 并且不是null和undefined
  
  
    // 判斷是否為數組
    _.isArray = nativeIsArray || function(obj) {
      return toString.call(obj) === "[object Array]";
    };
    //nativeIsArray 是ES5原生的Array.isArray
    
    //判斷是否是NaN,利用NaN是唯一一個不等于自己的Number類型
    _.isNaN = function(obj) {
      return _.isNumber(obj) && obj !== +obj;
    };
    
    _.isUndefined = function(obj) {
        return obj === void 0;
    };
  
    _.isNull = function(obj) {
        return obj === null;
    };
    
     _.isFinite = function(obj) {
    return isFinite(obj) && !isNaN(parseFloat(obj));
    };
    
    //在 IE < 9 下對 arguments 調用 Object.prototype.toString.call,結果是 [object Object],所以利用他的callee屬性來判斷
    if (!_.isArguments(arguments)) {
        _.isArguments = function(obj) {
          return _.has(obj, "callee");
        };
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80891.html

相關文章

  • js筆記內容

    摘要:定義運算符用來判斷一個構造函數的屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上,用于引用類型。但其實,實例的來自于構造函數的。 一、關于css 樣式優先級: 行內樣式>id選擇器樣式>類選擇器樣式>標簽選擇器樣式>通配符選擇器的樣式>繼承樣式>默認樣式 二、關于js 關于問題:**JavaScript中的所有事物都是對象??** 從typeof和instanceo...

    n7then 評論0 收藏0
  • JS中的typeof和類型判斷

    摘要:摘要這篇文章講述運算符判斷基本類型和引用類型的區別,以及怎么判斷數組類型和空對象有種原始類型,即和。類型判斷類型判斷,一般就是判斷是否是數組,是否是空對象。方法四使用語法,返回一個數組,只需要判斷數組長度是否大于即可。 摘要 這篇文章講述typeof運算符判斷基本類型和引用類型的區別,以及怎么判斷數組類型和空對象 typeof ECMAScript 有 5 種原始類型(primitiv...

    cppowboy 評論0 收藏0
  • js

    摘要:所以我們又可以得出一個結論原型的屬性指向構造函數,構造函數又通過屬性指回原型,但是并不是所有函數都具有這個屬性,就沒有這個屬性。 1.原始類型 boolean number string null undefined symbol原始類型儲存的都是值,是沒有函數可以調用的,undefined.toString() 顯示報錯,但是1.toString() // 1 ; 是因為1被強制轉...

    pubdreamcc 評論0 收藏0
  • 雜談數據類型獲取

    摘要:如果項目中需要頻繁的進行數據類型的判斷與獲取可以考慮進行封裝,簡單的處理與已足夠。 前言 在js中數據我們經常需要判斷或者獲取數據類型,大部分時候我們都是通過type加instanceof來組合判斷數據類型來實現,大部分代碼中對于數據類型的獲取處理都比較丑陋,前段時間看了一下Q的源代碼中對數據類型的判斷與獲取處理,看起來相當簡潔也比較好用,這篇文章來進行一下發散。 typeof 在js...

    newsning 評論0 收藏0
  • 分析 JavaScript 的數據類型與變量

    摘要:基本數據類型在中,基本數據類型有種,即數值字符串布爾值。兩個布爾值轉為數值進行比較。對于對象和布爾值,調用它們的方法得到對應的字符串值,然后進行字符串相加。減法對于字符串布爾值或者,自動調用,轉換結果若為,那么最終結果為。 這篇文章,來聊聊 JS 中的數據類型與變量。這是在學習 JS 時最基礎的一類問題,但卻很重要。希望我的分享有幫助到你。 文章開頭,我先提幾個面試中遇到的問題: 比如...

    Mike617 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<