日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《你不知道的Javascript--中卷 学习总结》(类型、值)

發布時間:2025/3/19 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《你不知道的Javascript--中卷 学习总结》(类型、值) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類型

類型是值的內部特征,它定義了值的行為,以使其區別于其他值。

內置類型

1、七種內置類型:

  • 空值(null)
  • 未定義(undefined)
  • 布爾值(boolean)
  • 數字(number)
  • 字符串(string)
  • 對象(object)
  • 符號(symbol,ES6中新增)

2、我們可以用typeof運算符來查看值的類型,它返回的是類型的字符串值。

3、因為typeof null === 'object',所以檢測null值的類型需要下面這段復合條件

var a = null;(!a && typeof a == "object"); // true 復制代碼

4、函數實際上是object的一個"子類型"。具體的說,函數是"可調用對象",它有一個內部屬性[[call]],該屬性使其可以被調用。

5、函數對象的length屬性是其聲明的參數的個數

值和類型

1、Javascript中的變量是沒有類型的,只有值才有。變量可以隨時持有任何類型的值。

2、已在作用域中聲明但還沒有賦值的變量,是undefined。

3、還沒有在作用域中聲明過得變量,是undeclared。

var a;typeof a // "undefined"typeof b // "undefined" 沒有聲明還是undefined 這主要是因為typeof的安全防范機制 復制代碼

typeof安全防范機制

  • 全局變量的檢驗
// 這樣是安全的if(typeof DEBUG ! == "undefined"){console.log('xxxxx')} 復制代碼
  • 非全局變量是否定義
(function(){function FeatureXYZ(){};function doSomethingCool(){var helper = (typeof FeatureXYZ !== "undefined") ? FeatureXYZ :function(){// default feature}var a = helper();}doSomethingCool()})() 復制代碼
  • 函數傳遞參數檢測
function doSomethingCool(FeatureXYZ){var helper = FeatureXYZ || function(){}var val = helper();// ...} 復制代碼

數組

1、數組可以容納任何類型的值,可以是字符串、數字、對象,甚至是其他數組。

2、使用delete運算符可以將單元從數組中刪除,但是請注意,單元刪除后,數組的length屬性并不會發生變化。

3、在創建"稀疏"數組(即含有空白或空缺單元的數組)。a[1]的值為undefined,但這與將其顯示賦值為undefined(a[1] = undefined)還是有所區別。

var a = [];a[0] = 1;a[2] = [3];a[1] // undefineda.length // 3 復制代碼

4、數組通過數字進行索引,但是他們也是對象,所以也可以包含字符串鍵值和屬性(但這些并不計算在數組長度內)。

5、如果字符串鍵值能夠被強制類型轉換為十進制數字的話,它就會被當做數字索引來處理

var a = [];a[0] = 1;a['foo'] = 2;a.length // 1a['foobar'] //2a.foobar //2var a = [];a['13'] = 42;a.length // 14 復制代碼

6、類數組=>數組的方式

  • slice
function foo(){var arr = Array.prototype.slice.call(arguments);arr.push('bam');console.log(arr)}foo('bar','baz') // ['bar','baz','bam'] 復制代碼
  • Array.from() (ES6)
var arr = Array.from(arguments) 復制代碼

字符串

1、Javascript中字符串是不可變的(指字符串的成員函數不會改變其原始值,而是創建并返回一個新的字符串),而數組是可變的。

2、字符串沒有reverse方法,變通方法可以先轉換為數組然后轉換為字符串。

var a = 'foo'var c = a.split("").reverse().join("")c; //"oof" 復制代碼

數字

1、Javascript中的數字類型是基于IEEE754標準來實現的,該標準通常也被稱為"浮點數"。Javascript使用的是"雙精度"格式。

2、toFixed() 方法可以指定小數部分的顯示位數,如果指定的小數部分的顯示位數多于實際位數就用0補齊。

3、toPrecision() 方法用來指定有效數位的顯示位數。

4、.運算符需要給與特別的注意,因為它是一個有效的數字字符,會被優先識別為數字字面量的一部分,然后才是對象屬性訪問運算符。

// 無效語法42.toFixed(3) // SyntaxError// 下面的語法都有效(42).toFixed(3) // 42.0000.42.toFixed(3) // 0.42042..toFixed(3) // 42.000 復制代碼

5、二進制浮點數最大的問題(所有遵循IEEE754規范的語言都是如此)就是小數的精度不準。(例如0.1+0.2===0.3 等于false的經典問題)

// 判斷兩個小數相等function numberCloseEnoughToEqual(n1,n2){return Math.abs(n1-n2) < Number.EPSILON;}var a = 0.1 + 0.2;var b = 0.3;numberCloseEnoughToEqual(a,b) // true 復制代碼

6、可以使用Number.isInteger()來檢測一個值是否是整數。

Number.isInteger(42) // trueNumber.isInteger(42.000) // trueNumber.isInteger(42.3) // false// polyfillif(!Number.isInteger){Number.isInteger = function(num){return typeof num === 'number' && num % 1 == 0}} 復制代碼

7、a | 0 可以將變量a中的數值轉換為32位有符號整數,因為數位運算符|只適用于32位整數(它只關心32位以內的值,其他的數位將被忽略)。

8、undefined類型只有一個值,即undefined。null類型也只有一個值,即null。他們的名稱既是類型也是值。undefined指從未賦值,null只曾賦過值,但是目前沒有值

9、null是一個特殊關鍵字,不是標識符,我們不能將其當做變量來使用和賦值。然而undefined卻是一個標識符,可以被當作變量來使用和賦值。

10、在非嚴格模式下,我們可以為全局標識符undefined賦值

function foo(){undefined = 2; // 非常糟糕的做法}foo();function foo(){"use strict";undefined = 2; // TypeError}foo() 復制代碼

11、我們可以通過void運算符即可得到undefined。表達式void __ 沒有返回值,因此返回結果是undefined。void并不改變表達式的結果,只是讓表達式不返回值。通常我們用void 0 來獲得undefined。

var a = 42;console.log(void a,a) // undefined 42 復制代碼

12、不是數字的數字(NaN)

  • NaN是數字類型的
var a = 2 / "foo"; // NaNtypeof a === 'number' // true 復制代碼
  • 檢測NaN
// 全局函數isNaN判斷。(但是有一個缺陷,就是當傳遞一個非數字的時候,isNaN也返回true)var a = 2 / 'foo';var b = 'foo';window.isNaN(a) // true window.isNaN(b) // true // ES6 的Number.isNaNif(!Number.isNaN){Number.isNaN = function(n){return (typeof n === "number" && window.isNaN(n))}}// 最簡單的方法,NaN是Javascript中唯一一個不等于自身的值if(!Number.isNaN){Number.isNaN = function(){return n !== n;}} 復制代碼

13、零值

  • Javascript中有一個常規的0和一個-0
  • 對負零進行字符串化會返回'0'
var a = 0 / -3;a; // -0a.toString() // '0'a+'' // '0'String(a) // '0' 復制代碼
  • 將字符串轉換為數字,得到的結果是準確的。
+"-0" // -0Number("-0") // -0JSON.parse("-0") // -0 復制代碼
  • 判斷-0
function isNegZero(n){n = Number(n);return (n===0) && (1/n===-Infinity)} 復制代碼

14、ES6新加入了一個工具方法Object.is()來判斷兩個值是否絕對相等(加入了NaN和-0的判斷)

if(!Object.is){Object.is = function(v1,v2) {// 判斷是否為-0if(v1===0 && v2===0){return 1/v1 === 1/v2}//判斷是否為NaNif(v1!==v1){return v2!==v2;}// 其他情況return v1 === v2;}} 復制代碼

總結

以上是生活随笔為你收集整理的《你不知道的Javascript--中卷 学习总结》(类型、值)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。