JS基础

数据类型

- JS中一共分成六种数据类型

- String 字符串

- Number 数值

- Boolean 布尔值

- Null 空值

- Undefined 未定义

- Object 对象

String 字符串

- JS中的字符串需要使用引号引起来双引号或单引号都行

- 在字符串中使用\作为转义字符

        \'  ==> '

        \"  ==> "

        \n  ==> 换行

        \t  ==> 制表符

        \\  ==> \

- 使用typeof运算符检查字符串时,会返回"string"

Number 数值

- JS中所有的整数和浮点数都是Number类型

- 特殊的数字

        Infinity 正无穷

        -Infinity 负无穷

        NaN 非法数字(Not A Number)

- 其他进制的数字的表示:

        0b 开头表示二进制,但是不是所有的浏览器都支持

        0 开头表示八进制

        0x 开头表示十六进制

- 使用typeof检查一个Number类型的数据时,会返回"number"

(包括NaN 和 Infinity)

Boolean 布尔值

- 布尔值主要用来进行逻辑判断,布尔值只有两个

        - true 逻辑的真

        - false 逻辑的假

- 使用typeof检查一个布尔值时,会返回"boolean"

Null 空值

- 空值专门用来表示为空的对象,Null类型的值只有一个

        - null

       使用typeof检查一个Null类型的值时会返回"object"

Undefined 未定义

- 如果声明一个变量但是没有为变量赋值此时变量的值就是undefined

- 该类型的值只有一个 undefined

- 使用typeof检查一个Undefined类型的值时,会返回"undefined"

类型转换

- 类型转换就是指将其他的数据类型,转换为String Number 或 Boolean

- 转换为String

- 方式一(强制类型转换):

-         调用被转换数据的toString()方法

-     例子:

            var a = 123;

            a = a.toString();

- 注意:这个方法不适用于null和undefined

由于这两个类型的数据中没有方法,所以调用toString()时会报错

- 方式二(强制类型转换):

-         调用String()函数

-     例子:

            var a = 123;

            a = String(a);

- 原理:对于Number Boolean String都会调用他们的toString()方法来将其转换为字符串,

对于null值,直接转换为字符串"null"。对于undefined直接转换为字符串"undefined"

- 方式三(隐式的类型转换): *****

        - 为任意的数据类型 +""

    - 例子:

            var a = true;

            a = a + "";

- 原理:和String()函数一样

转换为Number

- 方式一(强制类型转换):

        - 调用Number()函数

    - 例子:

        var s = "123";

        s = Number(s);

- 转换的情况:

1.字符串 --> 数字

    - 如果字符串是一个合法的数字,则直接转换为对应的数字

    - 如果字符串是一个非法的数字,则转换为NaN

    - 如果是一个空串或纯空格的字符串,则转换为0

2.布尔值 --> 数字

    - true转换为1

    - false转换为0

3.空值 --> 数字

    - null转换为0

4.未定义 --> 数字

    - undefined 转换为NaN

- 方式二(强制类型转换):

        - 调用parseInt()或parseFloat()

        - 这两个函数专门用来将一个字符串转换为数字的

    - parseInt()

          - 可以将一个字符串中的有效的整数位提取出来,并转换为Number

    - 例子:

        var a = "123.456px";

        a = parseInt(a); //123

    - 如果需要可以在parseInt()中指定一个第二个参数,来指定进制

    - parseFloat()

        - 可以将一个字符串中的有效的小数位提取出来,并转换为Number

    - 例子:

        var a = "123.456px";

        a = parseFloat(a); //123.456

- 方式三(隐式的类型转换):

        - 使用一元的+来进行隐式的类型转换

    - 例子:

        var a = "123";

        a = +a;

- 原理:和Number()函数一样

转换为布尔值

- 方式一(强制类型转换):

        - 使用Boolean()函数

    - 例子:

        var s = "false";

        s = Boolean(s); //true

    - 转换的情况

            字符串 --> 布尔

    - 除了空串其余全是true

    数值 --> 布尔

    - 除了0和NaN其余的全是true

    null、undefined ---> 布尔

    - 都是false

    对象 ---> 布尔

    - 都是true

- 方式二(隐式类型转换):

        - 为任意的数据类型做两次非运算,即可将其转换为布尔值

    - 例子:

        var a = "hello";

        a = !!a; //true

运算符

- 运算符也称为操作符

- 通过运算符可以对一个或多个值进行运算或操作

- typeof运算符

- 用来检查一个变量的数据类型

- 语法:typeof 变量

- 它会返回一个用于描述类型的字符串作为结果

- 算数运算符

        + 对两个值进行加法运算并返回结果

        -  对两个值进行减法运算并返回结果

        * 对两个值进行乘法运算并返回结果

        / 对两个值进行除法运算并返回结果

        % 对两个值进行取余运算并返回结果

- 除了加法以外,对非Number类型的值进行运算时,都会先转换为Number然后在做运算。

- 而做加法运算时,如果是两个字符串进行相加,则会做拼串操作,将两个字符连接为一个字符串。

- 任何值和字符串做加法,都会先转换为字符串,然后再拼串

- 一元运算符

- 一元运算符只需要一个操作数

    - 一元的+

 - 就是正号,不会对值产生任何影响,但是可以将一个非数字转换为数字

    - 例子:

        var a = true;

        a = +a;

- 一元的-

- 就是负号,可以对一个数字进行符号位取反

        - 例子:

            var a = 10;

            a = -a;

- 自增

    - 自增可以使变量在原值的基础上自增1

    - 自增使用 ++

    - 自增可以使用 前++(++a)后++(a++)

    - 无论是++a 还是 a++都会立即使原变量自增1

    不同的是++a和a++的值是不同的,

    ++a的值是变量的新值(自增后的值)

    a++的值是变量的原值(自增前的值)

- 自减

    - 自减可以使变量在原值的基础上自减1

    - 自减使用 --

    - 自减可以使用 前--(--a)后--(a--)

    - 无论是--a 还是 a--都会立即使原变量自减1

    不同的是--a和a--的值是不同的,

    --a的值是变量的新值(自减后的值)

    a--的值是变量的原值(自减前的值)

逻辑运算符

!

    - 非运算可以对一个布尔值进行取反,true变false false边true

    - 当对非布尔值使用!时,会先将其转换为布尔值然后再取反

    - 我们可以利用!来将其他的数据类型转换为布尔值

&&

    - &&可以对符号两侧的值进行与运算

    - 只有两端的值都为true时,才会返回true。只要有一个false就会返回false。

    - 与是一个短路的与,如果第一个值是false,则不再检查第二个值

    - 对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值

        - 规则:

                1.如果第一个值为false,则返回第一个值

                2.如果第一个值为true,则返回第二个值

||

    - ||可以对符号两侧的值进行或运算

    - 只有两端都是false时,才会返回false。只要有一个true,就会返回true。

    - 或是一个短路的或,如果第一个值是true,则不再检查第二个值

    - 对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值

        - 规则:

            1.如果第一个值为true,则返回第一个值

            2.如果第一个值为false,则返回第二个值

赋值运算符

        =

    - 可以将符号右侧的值赋值给左侧变量

        +=

    - a += 5 相当于 a = a+5

    - var str = "hello";  str += "world";

        -=

    - a -= 5  相当于 a = a-5

        *=

    - a *= 5 相当于 a = a*5

        /=

    - a /= 5 相当于 a = a/5

        %=

    - a %= 5 相当于 a = a%5

关系运算符

- 关系运算符用来比较两个值之间的大小关系的

    >

    >=

    <

    <=

- 关系运算符的规则和数学中一致,用来比较两个值之间的关系,

如果关系成立则返回true,关系不成立则返回false。

- 如果比较的两个值是非数值,会将其转换为Number然后再比较。

- 如果比较的两个值都是字符串,此时会比较字符串的Unicode编码,而不会转换为Number。

相等运算符

        ==

    - 相等,判断左右两个值是否相等,如果相等返回true,如果不等返回false

    - 相等会自动对两个值进行类型转换,如果对不同的类型进行比较,会将其转换为相同的类型然后再比较,

    转换后相等它也会返回true

        !=

    - 不等,判断左右两个值是否不等,如果不等则返回true,如果相等则返回false

    - 不等也会做自动的类型转换。

        ===

    - 全等,判断左右两个值是否全等,它和相等类似,只不过它不会进行自动的类型转换,

    如果两个值的类型不同,则直接返回false

        !==

    - 不全等,和不等类似,但是它不会进行自动的类型转换,如果两个值的类型不同,它会直接返回true

特殊的值:

        - null和undefined

    - 由于undefined衍生自null,所以null == undefined 会返回true。

但是 null === undefined 会返回false。

        - NaN

    - NaN不与任何值相等,报告它自身 NaN == NaN //false

        - 判断一个值是否是NaN

    - 使用isNaN()函数

流程控制语句

        - 程序都是自上向下的顺序执行的,

    通过流程控制语句可以改变程序执行的顺序,或者反复的执行某一段的程序。

- 分类:

        1.条件判断语句

        2.条件分支语句

        3.循环语句

条件判断语句

    - 条件判断语句也称为if语句

        - 语法一:

            if(条件表达式){

            语句...

            }

    - 执行流程:

    if语句执行时,会先对条件表达式进行求值判断,

    如果值为true,则执行if后的语句

    如果值为false,则不执行

- 语法二:

        if(条件表达式){

        语句...

        }else{

        语句...

        }

        - 执行流程:

    if...else语句执行时,会对条件表达式进行求值判断,

        如果值为true,则执行if后的语句

        如果值为false,则执行else后的语句

- 语法三:

        if(条件表达式){

        语句...

        }else if(条件表达式){

        语句...

        }else if(条件表达式){

        语句...

        }else if(条件表达式){

        语句...

        }else{

        语句...

        }

    - 执行流程

    - if...else if...else语句执行时,会自上至下依次对条件表达式进行求值判断,

      如果判断结果为true,则执行当前if后的语句,执行完成后语句结束。

      如果判断结果为false,则继续向下判断,直到找到为true的为止。

      如果所有的条件表达式都是false,则执行else后的语句

条件分支语句

- switch语句

- 语法:

switch(条件表达式){

case 表达式:

语句...

break;

case 表达式:

语句...

break;

case 表达式:

语句...

break;

default:

语句...

break;

}

- 执行流程:

- switch...case...语句在执行时,会依次将case后的表达式的值和switch后的表达式的值进行全等比较,

如果比较结果为false,则继续向下比较。如果比较结果为true,则从当前case处开始向下执行代码。

如果所有的case判断结果都为false,则从default处开始执行代码。

2.循环语句

- 通过循环语句可以反复执行某些语句多次

- while循环

- 语法:

while(条件表达式){

语句...

}

- 执行流程:

while语句在执行时,会先对条件表达式进行求值判断,

如果判断结果为false,则终止循环

如果判断结果为true,则执行循环体

循环体执行完毕,继续对条件表达式进行求值判断,依此类推

- do...while循环

- 语法:

do{

语句...

}while(条件表达式)

- 执行流程

do...while在执行时,会先执行do后的循环体,然后在对条件表达式进行判断,

如果判断判断结果为false,则终止循环。

如果判断结果为true,则继续执行循环体,依此类推

- 和while的区别:

while:先判断后执行

do...while: 先执行后判断

- do...while可以确保循环体至少执行一次。

- for循环

- 语法:

for(①初始化表达式 ; ②条件表达式 ; ④更新表达式){

③语句...

}

- 执行流程:

首先执行①初始化表达式,初始化一个变量,

然后对②条件表达式进行求值判断,如果为false则终止循环

如果判断结果为true,则执行③循环体

循环体执行完毕,执行④更新表达式,对变量进行更新。

更新表达式执行完毕重复②

- 死循环

while(true){

}

for(;;){

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339