js數(shù)據(jù)類型與運算符

調(diào)試javascript

調(diào)試神器:console.log()

  • javascript一般的流程是一行一行運行
  • js引擎默認換行為一條語句
  • 先聲明,再賦值
  • 賦值的標示名稱第一個字母可以是美元符號$ _
  • javascript聲明有保留字不能賦值
  • 標示符不能有)"-" 中橫線

變量命名規(guī)則

  • 第一個字符,可以是任意Unicode字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)
  • 第二個字符及后面的字符,除了Unicode字母、美元符號和下劃線,還可以用數(shù)字0-9

下面這些都是合法的標識符:

arg0
_tmp
$elem
π

下面這些則是不合法的標識符:

1a  // 第一個字符不能是數(shù)字
23  // 同上
***  // 標識符不能包含星號
a+b  // 標識符不能包含加號
-d  // 標識符不能包含減號或連詞線

中文是合法的標識符,可以用作變量名

var 臨時變量 = 1;

JavaScript有一些保留字,不能用作標識符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。

另外,還有三個詞雖然不是保留字,但是因為具有特別含義,也不應(yīng)該用作標識符:Infinity、NaN、undefined

JavaScript區(qū)塊

JavaScript使用大括號,將多個相關(guān)的語句組合在一起,稱為“區(qū)塊”(block)。

與大多數(shù)編程語言不一樣,JavaScript的區(qū)塊不構(gòu)成單獨的作用域(scope)。也就是說,區(qū)塊中的變量與區(qū)塊外的變量,屬于同一個作用域。

{
  var a = 1;
}

a // 1

上面代碼在區(qū)塊內(nèi)部,聲明并賦值了變量a,然后在區(qū)塊外部,變量a依然有效,這說明區(qū)塊不構(gòu)成單獨的作用域,與不使用區(qū)塊的情況沒有任何區(qū)別。所以,單獨使用的區(qū)塊在JavaScript中意義不大,很少出現(xiàn)。區(qū)塊往往用來構(gòu)成其他更復雜的語法結(jié)構(gòu),比如for、if、while、function等。

javascript數(shù)據(jù)類型

概述

JavaScript 語言的每一個值,都屬于某一種數(shù)據(jù)類型。JavaScript 的數(shù)據(jù)類型,共有六種。(ES6 又新增了第七種 Symbol 類型的值)

  • 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
  • 字符串(string):字符組成的文本(比如"Hello World")
  • 布爾值(boolean):true(真)和false(假)兩個特定值
  • undefined:表示“未定義”或不存在,即由于目前沒有定義,所以此處暫時沒有任何值
  • null:表示無值,即此處的值就是“無”的狀態(tài)。
  • 對象(object):各種值組成的集合
    通常,我們將數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型,不能再細分了。而將對象稱為合成類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。至于undefined和null,一般將它們看成兩個特殊值。

對象又可以分成三個子類型。

  • 狹義的對象(object)
  • 數(shù)組(array)
  • 函數(shù)(function)

typeof運算符

JavaScript有三種方法,可以確定一個值到底是什么類型。

  • typeof運算符(判斷函數(shù)是什么類型)
  • instanceof運算符
  • Object.prototype.toString方法

布爾值

布爾值代表“真”和“假”兩個狀態(tài)。“真”用關(guān)鍵字true表示,“假”用關(guān)鍵字false表示。布爾值只有這兩個值。

下列運算符會返回布爾值:

  • 兩元邏輯運算符: && (And),|| (Or)
  • 前置邏輯運算符: ! (Not)
  • 相等運算符:===, ! ==, ==,! =
  • 比較運算符:>,>=,<,<=

運算符

JavaScript中運算符主要用于連接簡單表達式,組成一個復雜的表達式。常見的有算數(shù)表達式、比較表達式、邏輯表達式、賦值表達式等,也有單目運算符,指操作原始表達式。大多數(shù)運算符都由標點符號組成(+、>=、!),也有關(guān)鍵字表示的運算符,如typeof、delete、instanceof等。

一些運算符可以作用于任何數(shù)據(jù)類型(typeof),但大部分操作符希望操作數(shù)是特定的類型,而且大部分操作符會計算出(我們也常說返回)一個特定類型的值(typeof返回的全是string)。在JavaScript中運算符通常會根據(jù)需要對操作數(shù)進行類型轉(zhuǎn)換,乘法操作符希望操作數(shù)是數(shù)字,但是 "3" * "5"也是合法的,JavaScript會自動將其轉(zhuǎn)換為數(shù)字計算,返回Number 15。

有些操作符對不同的數(shù)據(jù)類型有不同的含義,比如 +

  • 在兩個操作數(shù)都是數(shù)字的時候,會做加法運算
  • 兩個參數(shù)都是字符串或在有一個參數(shù)是字符串的情況下會把另外一個參數(shù)轉(zhuǎn)換為字符串做字符串拼接
  • 在參數(shù)有對象的情況下會調(diào)用其valueOf或toString
  • 在只有一個字符串參數(shù)的時候會嘗試將其轉(zhuǎn)換為數(shù)字
  • 在只有一個數(shù)字參數(shù)的時候返回其正數(shù)值
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
console.log(+"4");//4 

注意: valueOf優(yōu)先級高于toString
注意: +obj 如果obj內(nèi)是字符串,會強制轉(zhuǎn)化成數(shù)字再返回

運算符類型

算數(shù)運算符

  • 加法運算符(Addition):x + y
  • 減法運算符(Subtraction): x - y
  • 乘法運算符(Multiplication): x * y
  • 除法運算符(Division):x / y
  • 余數(shù)運算符(Remainder):x % y
  • 自增運算符(Increment):++ x 或者 x++
執(zhí)行前置遞增和遞減操作時,變量的值都在語句被求值以前改變的(這種情況被稱為副效應(yīng))
    例:
    var age = 29;       
    var anotherAge = --age + 2;
    alert(age);         //輸出28
    alert(anotherAge);        //輸出30
    由于前置遞增和遞減操作與執(zhí)行語句的優(yōu)先級相等,因此整個語句會從左至有被求值,例:
    var num1 = 2;
    var num2 = 20;
    var num3 = --num1 + num2;        //等于21
    var num4 = num1 + num2;        //等于21

    后置型
    后置遞增遞減語法不變,但區(qū)別是:即遞增遞減操作是在包含它們的語句被求值之后才執(zhí)行的,例:
    var num1 = 2;
    var num2 = 20;
    var num3 = num1-- + num2;        //等于22
    var num4 = num1 + num2;        //等于21
  • 自減運算符(Decrement):--x 或者 x--
  • 求負運算符(Negate):-x
  • 數(shù)值運算符(Convert to number): +x

賦值運算符

賦值運算符用于給變量賦值,最常見的賦值運算符,當然就是等號,表達式x=y表示將y賦值給x。除此之外,JavaScript還提供其他11個賦值運算符。

x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x >>= y // 等同于 x = x >> y
x <<= y // 等同于 x = x << y
x >>>= y // 等同于 x = x >>> y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
x ^= y // 等同于 x = x ^ y

比較運算符

比較運算符比較兩個值,然后返回一個布爾值,表示是否滿足比較條件。JavaScript提供了8個比較運算符。

== 相等
=== 嚴格相等
!=不相等
!== 嚴格不相等
< 小于
<= 小于或等于
> 大于
>= 大于或等于

布爾運算符

  • ! 取反運算符
  • && 且運算符
  • || 或運算符
  • condition? true case : false case 三元條件運算符

位運算符

  • 或運算(or):符號為|,表示兩個二進制位中有一個為1,則結(jié)果為1,否則為0。
  • 與運算(and):符號為&,表示兩個二進制位都為1,則結(jié)果為1,否則為0。
  • 否運算(not):符號為~,表示將一個二進制位變成相反值。
  • 異或運算(xor):符號為?,表示兩個二進制位中有且僅有一個為1時,結(jié)果為1,否則為0。
  • 左移運算(left shift):符號為<<
  • 右移運算(right shift):符號為>>
  • 帶符號位的右移運算(zero filled right shift):符號為>>>

其它

小括號

在JavaScript中,圓括號是一種運算符,它有兩種用法:如果把表達式放在圓括號之中,作用是求值;如果跟在函數(shù)的后面,作用是調(diào)用函數(shù)。

把表達式放在圓括號之中,將返回表達式的值。

void

void運算符的作用是執(zhí)行一個表達式,然后返回undefined。

逗號運算符

逗號運算符用于對兩個表達式求值,并返回后一個表達式的值

JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復雜類型?

JavaScript 的數(shù)據(jù)類型,共有六種。(ES6 又新增了第七種 Symbol 類型的值)

  1. 數(shù)值(number)
  2. 字符串(string)
  3. 布爾值(boolean)
    true(真)和false(假)兩個特定值
  4. undefined
  5. null
  6. 對象(object)
原始類型值

我們將數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值

復雜類型值

將對象稱為合成類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。至于undefined和null,一般將它們看成兩個特殊值

如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)

JavaScript有三種方法,可以確定一個值到底是什么類型。

  • typeof運算符
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
//數(shù)值、字符串、布爾值分別返回number、string、boolean

function f() {}
typeof f
//函數(shù)返回function

typeof undefined
//undefined返回undefined

typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
//其他情況都返回object
  • instanceof運算符
  • Object.prototype.toString方法

== 與===有什么區(qū)別

它們的區(qū)別是相等運算符( == )比較兩個值是否相等,嚴格相等運算符( === )比較它們是否為“同一個值”。如果兩個值不是同一類型,嚴格相等運算符( === )直接返回false,而相等運算符( == )會將它們轉(zhuǎn)化成同一個類型,再用嚴格相等運算符進行比較。
注意:相等運算符隱藏的類型轉(zhuǎn)換,會帶來一些違反直覺的結(jié)果。

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

2 == true           // false
2 == false          // false

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

上面這些表達式都很容易出錯,因此不要使用相等運算符( == ),最好只使用嚴格相等運算符( === )。
以下代碼的輸出結(jié)果是?為什么?

console.log(1+1);   //2     在兩個操作數(shù)都是數(shù)字的時候,會做加法運算
console.log("2"+"4");   //"24"      兩個參數(shù)都是字符串或在有一個參數(shù)是字符串的情況下會把另外一個參數(shù)轉(zhuǎn)換為字符串做字符串拼接
console.log(2+"4");     //"24"      原因同上
console.log(+"4");  //4       在只有一個字符串參數(shù)的時候會嘗試將其轉(zhuǎn)換為數(shù)字  

以下代碼的輸出結(jié)果是?

var a = 1;  
a+++a;  //等于(a++)+a ;  a++ 返回1,自增a等于2,so 1+2 =3
typeof a+2; //'number2'  typeof 優(yōu)先級比加法運算符高,其實是(typeof a) + 2。起到了字符串拼接作用
//無輸出結(jié)果 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容