第十二节:JavaScript 基础语法(一)

第十二节:JavaScript 基础语法

3.2.1 变量
标识符

实际开发中,经常要自定义一些符号来标记一些名称,这些符号都被称为标识符

  1. 由大小写字母、数字、下划线 和 美元符号($) 组成,如:str、arr3、$3
  2. 不能以数字开头,如:34da 是非法标识符
  3. 严格区分大小写,如:it 和 IT 表示两个不同的标识符
  4. 不能使用 JavaScript 中的关键字命名,如:var 作为变量名是不合法的
  5. 要尽量做到 “见起名知其意”,如 name 表示名字

注意:当标识符需要多个单词进行表示时,可以使用以下几种方法

  • 下划线法(user_name):通常应用于变量的命名
  • 驼峰法(userName):通常用于函数的命名
  • 帕斯卡法(UserName)
保留关键字

JavaScript 保留字

breakdoinstanceoftypeof
caseelsenewvar
catchfinallyreturnvoid
continueforswitchwhile
debugger*functionthiswith
defaultifthrowdelete
intrylet*yield*

JavaScript 关键字

abstractenumintshort
booleanexportinterfacestatic
byteextendslongsuper
charfinalnativesynchronized
classfloatpackagethrows
constgotoprivatetransient
debuggerimplenmentsprotectedvolatile
doubleimportpublic
变量的使用

变量可以看做是存储数据的容器,变量的声明规则和标识符一样

// 变量声明
var a = 10;

// 变量可以一次声明多个
var lastname="Doe", age=30, job="carpenter";

在这里插入图片描述

常量的定义

JavaScript 在ES6 中新增了 const 关键字,用于实现常量的定义,习惯上常量名称总是使用大写字母表示

常量一旦被赋值就不能改变,并且常量在声明时,必须为其指定某个值

const PI = 3.14;
const P = 2 * PI * r;

3.2.2 数据类型

JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型:字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、对象(Object)、空(Null)、未定义(Undefined)

原始数据类型(基本类型)
  1. 字符串 String

字符串是存储字符的变量,可以使用单引号或双引号

var = "Hello";

字符串和数字拼接,数据类型仍为字符串
alert("hello" + 220);	// hello220

字符串和数字拼接,先计算括号内的结果,再进行拼接
alert("hello" + (220 + 120);	// hello340
  1. 数值型 Number

    JavaScript 中的数值类型不区分整数和浮点数,所有数字都是数值型

    var oct = 032;	// 八进制数表示的26
    var dec = 26;	// 十进制数表示的26
    var hex = 0x1a;	// 十六进制数表示的26
    
    var fnum1 = 3.14E3;		// 科学计数法格式 3.14*10³
    

    非数值 NaN

    JavaScript 中的 NaN 是一个全局对象的属性,与数值型中的特殊值 NaN 一样,都表示非数字,可用于表示某个数据是否属于数值型

    当 NaN 和 NaN 进行比较时,结果不一定是 true,这是因为 被操作的数据类型可能是布尔值、字符型、空值、未定义型 和 对象型中的任意一种类型

  2. 布尔型 Boolean

    布尔型是 JavaScript 中较常用的数据类型之一,通常用于逻辑判断,它只有 true 和 false 两个值,表示事物的 真 和 假

    var flag1 = true;
    var flag2 = false;
    
    // 注意:JavaScript 中严格遵循大小写,因此,true 和 false 值只有全部为小写时才表示布尔型
    

    转义符

    转义符说明
    \’单引号
    \"双引号
    \n回车换行
    \r换行
    \v跳格(Tab、水平)
    \tTab符号
    \f换页
    \\反斜杠(\)
    \b退格
    \0Null字节
  3. 空值 Null

    只有一个特殊的 null 值,用于表示一个不存在的或无效的对象或地址,只有变量的值是小写的 null 时才会表示空值

  4. 未定义型 Undefined

    未定义型 也只有一个特殊的 undefined 值,用于声明的变量还未被初始化时,变量的默认值为 undefined

    与 null 不同的是,unfinished 表示没有为变量设置值,而 null 则表示变量不存在或者无效

    注意:null 和 undefined 与 空字符串 和 0 都不相等

引用数据类型

引用数据类型为 Object对象,后面详细介绍

Object 对象分为用户自定义的对象 和 JavaScript 提供的内置对象

数据类型检测

JavaScript 中变量的数据类型不是开发人员设定的,而是根据该变量使用的上下文在运行时决定的

var num1 = 12, num2 = "14", sum = 0;
sum = num1 + num2;			// 变量进行相加运算
console.log(sum);			// 输出结果为:1214
  1. typeof 操作符

    typeof 操作符 以字符串的形式,返回未经计算的操作数的类型

    var num1 = 12, num2= "14";
    var sum = num1 + num2;
    
    console,log(typeof num1);	// number
    console.log(typeof.num2);	// string
    console.logo(typeof.sum);	// string
    
  2. 对象原型的扩展函数

    JavaScript 中一切皆为对象,因此可以利用对象原型的扩展函数,Object.peototype.toString.call() 更精确的区分数据类型

    var data = null;	// 待判断的数据
    var type = 'Null';	// 数据类型,开始字母要大写,如:Boolean、String、Undefined 等
    
    // 检测数类型的表达式,若是指定的 type 类型,则返回 true,否则返回 false
    Object.peototype.toString.call(data) == '[Object ' + type + ']';
    
数据类型转换
  1. 转布尔型

    数据转布尔型在实际开发中是最常见的一种类型转换,经常用于表达式和流程控制语句,如数据的比较、条件的判断

    • 通过 Boolean() 函数可以对用户输入的内容进行布尔类型转换
      • 当用户单击取消按钮 或 未输入任何字符 就单击“确定”按钮时,会被转为 false
      • 当有内容输入时就转为 true
    • Boolean() 函数会将任何非空字符串和非零的数值转换为 true,将空字符串、0、NaN、undefined 和 null 转换为 false
    var con = prompt();		// 保存用户的输出内容
    if (Boolean(con)) {
        document.write('已输入的内容');
    } else {
        document.write('无输入内容');
    }
    
    console.log(Boolean(con));	// 用户单击“取消”按钮,则结果为 false
    console.log(Boolean(con));	// 用户未输入,单击“确定”按钮,则结果为 false
    console.log(Boolean(con));	// 用户输入"哈哈",单击“确定”按钮,则结果为 true
    
  2. 转数值型

    实际开发中,为了保证参数都是数值类型,要利用 JavaScript 提供的 Number()函数、parseInt()函数、parseFloat()函数 进行数据转换

    这三个函数在转换纯数字时会忽略前导零

    • “0123” 会被转换成 123

    parseFloat() 函数会将数据转换为浮点数

    parseInt() 函数会直接忽略小数部分,返回数据的整数部分,并可通过第二个参数设置转换的进制数

    待转数据Number()parseInt()parseFloat()
    纯数字字符串转换成对应的数字转换成对应的数字转换成对应的数字
    空字符串0NaNNaN
    数字开头的字符串NaN转成开头的数字转成开头的数字
    非数字开头的字符串NaNNaNNaN
    null0NaNNaN
    undefinedNaNNaNNaN
    false0NaNNaN
    true1NaNNaN
    var num1 = prompt();	// 假设输入为:123abc
    var num2 = prompt();	// 假设输入为:456
    
    console.log(parseInt(num1) + parseInt(num2));	// 此时 num1=123,num2=456,结果为:579
    
    设置转换的进制数
    console.log(parseInt('A',16));		// 用16进制转换 F,结果为:10
    

    判断类型 isNaN

    实际开发中,为了数据更严谨,使用 isNaN

    var num1 = prompt("输入第一个数据");		// 假设数据为:abc
    var num2 = prompt("输入第二个数据");		// 假设数据为:123
    
    var num1 = parseInt(num1), num2 = parseInt(num2);	// 转数值型
    
    if (isNaN(num1) || isNaN(num2)) {		// 判断是否为 NaN
        console.log("非法数字");
    } else {
        console.log(num1 + num2);
    }
    
  3. 转字符型

    实际开发中,可以利用 JavaScript 中的 String() 函数 和 toString() 函数将数据转换成字符串

  • String() :可以将任意类型转换成字符型
  • toString():除了 null 和 undefined ,没有 toString() 外,其他数据都可以完成字符的转换
var num1 = num2 = num3 = 4, num4 = 26;

console.log(num1 + num2 + num3.toString());		// 4 + 4 +"4" = "84"
console.log(num4.toString(2));					// 将 num4 转换成二进制数,再转为字符:"11010"

3.2.3 表达式
算数运算符
运算符说明
+
-
*
/
%取余
**幂运算(ES7新特性)
++自增
自减
  1. 取余

    取余操作,俗称:模

    作用:取两个数字的余数

    var i = 10 % 3;			// 值为 1
    

    使用场合:

    1. 判断数字的奇偶性
    2. 获取数字的最后几位
  2. 自增自减

    ++ : 自增,在数值的基础上,进行 +1 操作

    –:自减,在数值的基础上,进行 -1 操作

    自增自减分为先加后加

    • 先加为:自身先加,再进行运算
    • 后加为:先运算,再自加(只影响自身结果,不影响运算结果)
    // 定义变量
    var a = 1, b = 0;
    
    b = ++a;	// a=2,b=2
    b = a++;	// a=2,b=1;
    
    自减同上
    
赋值运算符(待学习)
运算符说明实例结果
=赋值a=3,b=2;
+=加并赋值a+=b;a=a+b;
-=减并赋值a-=b;a=a-b;
*=乘并赋值a*=b;a=a*b;
/=除并赋值a/=b;a=a/b;
%=模并赋值a%=b;a=a%b;
+=连接并赋值
**=幂运算并赋值
<<=左移位赋值
>>=右位移赋值
>>>=无符号右位移赋值
&=按位与赋值
^=按位异或赋值
|=按位或赋值
比较运算符
运算符说明
==等于(只比较数据,不比较类型)
!=不等于(只比较数据,不比较类型)
===全等(不仅比较数据,还要比较类型)
!==不全等(不仅比较数据,还要比较类型)
>大于
>=大于等于
<小于
<=小于等于

判断数据是否为数字

isNaN()会抛开数据类型来判断数据是否为数字

console.log(isNaN(20));		// true
逻辑运算符
逻辑运算符说明
逻辑与&&
逻辑或||
逻辑非!
  1. 逻辑与 &&

    关联两个条件,两个条件都为真的时候,那么整个表达式的结果才为真

    var score = 85;
    var result = score>=60 && score<=80;	// false
    
  2. 逻辑或 ||

    关联两个条件,两个条件中,只要有一个为真,那么整个表达式的结果就为真 问题:笔试题和面试题,笔试题或面试题的分数,有一个超过60就认为是合格

    var score = 85;
    var result = score>=60 || score<=80;	// true
    
  3. 逻辑非 !

    对条件取反(非真即假 非假即真) 语法:!条件

    注意:逻辑非,只有一个操作数

    true == !false;
    
  4. 短路逻辑

    短路 &&

    如果第一个条件的结果已经为 false 的话,那么就不会再判断第二个 条件,那么整个表达式的值,就是 false 如果第一个条件的结果是true的话,则继续判断(执行)第二个条件 (表达式),并且以第二个表达式的值,作为整个 表达式的值

    短路 ||

    如果第一个条件的结果已经为 true的话,那么就不会再判断第二个 条件,那么整个表达式的值,就是true 如果第一个条件的结果是false的话,则继续判断(执行)第二个条件 (表达式),并且以第二个表达式的值,作为整个表达式的值

三元运算符

三元运算符也叫三目运算符:运算符需要三个操作

运算过程:先判断条件表达式的值,如果为 true,则返回表达式1,如果为 false,则返回表达式2

语法:条件表达式 ? 表达式1 : 表达式2;

var msg = age>18 ? “成年人” : “未成年人”;
位运算符

JavaScript 中将参与位运算符的操作视为 由二进制(0和1)组成的 32 位的串

运算符说明实例解释
&按位与a & ba 和 b 每一位进行 “与“ 操作后的结果
|按位或a | ba 和 b 每一位进行 ”或“ 操作后的结果
~按位非~ aa 的每一位进行 ”非” 操作后的结果
^按位异或a ^ ba 和 b 每一位进行 “异或” 后的结果
<<左移a << b将 a 左移 b 位,右边用 0 填充
>>右移a >> b将 a 右移 b 位,丢弃被移出位,左边最高位用 0 或 1 填充
>>>无符号右移a >>> b将 a 右移 b 位,丢弃被移出位,左边最高位用 0 填充
  1. “&” 是将参与运算的两个二进制数进行 “与” 运算,如果两个二进制位都是 1,则该位的运算结果为 1,否则为 0

    // 实例:15 & 9
    
    15 = 1111, 9 = 1001;
    
    00000000 00000000 00000000 00001111
    00000000 00000000 00000000 00001001
    ———————————————————————————————————
    00000000 00000000 00000000 00001001
    
    结果为 1001,换算成 10进制为:9
    
  2. “|” 是将参与运算 的两个进制数进行 “或” 运算,如果两个二进制位上有一个是1,则该位的运算结果为1,否则为0

    // 实例:15 | 9
    
    15 = 1111, 9 = 1001;
    
    00000000 00000000 00000000 00001111
    00000000 00000000 00000000 00001001
    ———————————————————————————————————
    00000000 00000000 00000000 00001111
    
    结果为 1111,换算成 10进制为:15
    
  3. "~" 只对一个操作数进行操作,如果二进制位是 0,则取反值为1,如果二进制位是1,则取反值为0

    // 实例:15
    
    15 = 1111;
    
    00000000 00000000 00000000 00001111
    ———————————————————————————————————
    11111111 11111111 11111111 11110000
    
    // 运算结果的最高位为 1,表示负数,则末位减1取反
    00000000 00000000 00000000 00010000
    结果换算成 10进制为:-16
    
  4. "^" 将参与运算的两个二进制数进行 “异或” 运算,如果二进制位相同,则值为 0,否则为 1

    // 实例:15
    
    15 = 1111;
    
    00000000 00000000 00000000 00001111
    00000000 00000000 00000000 00001001
    ———————————————————————————————————
    00000000 00000000 00000000 00000110
    
    结果换算成 10进制为:6
    
  5. “<<” 将操作数所有二进制位向左移动指定位数。运算时,右边的空位补0,左边移走的部分舍去

    // 实例:9
    
    15 = 1001;
    
    00000000 00000000 00000000 00001001			<< 2
    ———————————————————————————————————
    000000 00000000 00000000 0000100100
    
    结果为 100100,换算成 10进制为:36
    
  6. ">>" 将操作数所有二进制数向右移动指定位数。运算时,左边的空位根据原数的符号位补 0 或 1(原来是负数就补 1,是正数就补 0)

    // 实例:9
    
    15 = 1001;
    
    00000000 00000000 00000000 00001001			>> 2
    ———————————————————————————————————
    0000000000 00000000 00000000 000010
    
    结果为 10,换算成 10进制为:2
    
  7. ">>>" 将操作数所有二进制向右移动指定位数。运算时,左边的空位补 0,(不考虑原数正负)

    00000000 00000000 00000000 00010011			>> 2
    ———————————————————————————————————
    0000000000 00000000 00000000 000100
    
    结果为 100,换算成 10进制为:4
    

3.2.4 流程控制
选择结构

选择语句也叫判断语句,当满足某个条件时,就进行某种处理,否则进行另一种处理,也可针对不同的情况进行不同的处理

  1. if…else if…else 语句

    在 JavaScript 中, 非"",非0, 非null, 如果当做判断条件的时候, 会看做 true ,其他的是 false

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tPldCVeu-1610438290537)(assets/image-20201002170719064.png)]

    语法格式:
    if (判断条件) {
        满足此条件时执行的代码段
    } else if (判断条件) {
        满足此条件时执行的代码段
    } else if (判断条件) {
        满足此条件时执行的代码段
    } else {
        不满足以上所有条件时,执行的代码段
    }
    
    // 判断学生成绩,划分等级
    
    if (score >= 0 && score <= 100) {
        if (score >= 90) {
            console.log("优秀");
        } else if (score >= 80 && score < 90) {
            console.log("良好");
        } else if (score >= 60 && socre <80) {
            console.log("及格");
        } else {
            console.log("不及格");
        }
    }
    
  2. switch case 语句

    switch 语句也是多分支语句,功能与 if 系列条件语句相同,不同的是他只能针对某个表达式的值做出判断,从而决定执行哪一段代码,该选择结构语句的特点就是代码更加清晰简洁、便于阅读

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnYSmzbh-1610438290539)(assets/image-20201002171823030.png)]

    语法格式:
    
    switch (表达式) {
        case 值 1: 代码段 1;
        break;
    	case 值 2: 代码段 2;
        break;
        default: 代码段 n;
    }
    
    // 判断学生成绩,划分等级
    
    switch (parseInt(score/10)) {
        case 10: console.log('满分');
    	break;
        case 9: console.log('优');
    	break;
    	case 8: console.log('良');
    	break;
        case 6: console.log('及格');
    	break;
        default: console.log('差');
    }
    

    跳转结构

    常用的跳转语句有 break 和 continue语句

    • break 可用在 switch 和 循环语句中,作用是 中止当前语句的执行,跳出 switch 选择结构或循环语句,执行后面的代码
    • continue 用于结束本次循环的执行,开始下一轮循环的执行操作
    outerloop:
    for (var i=0; i<10; ++i) {
        if (i == 3) {
            break outerloop;
        }
        console.log("i=" + i);
    }
    
    // 结果:0, 1, 2
    
    outerloop:
    for (var i=0; i<10; ++i) {
        if (i == 3) {
            continue outerloop;
        }
        console.log("i=" + i);
    }
    
    // 结果:0, 1, 2, 4, 5, 6, 7, 8, 9
    
循环结构

循环语句可以数显一段代码的重复执行,如连续输出 1~100 的数字

  1. while 循环

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rgZ5f5xT-1610438290543)(assets/image-20201002175502802.png)]

    语法格式:
    
    while(循环条件) {
        循环体
        ...
    }
    
    while(true) {
        console.log("这是一个死循环");
    }
    
    // 当 while 的循环条件为 true 时,该循环为死循环,无限循环
    
  2. do…while 循环

    do…while 循环语句的功能与while循环语句类似,唯一的区别在于,while 是先判断条件后 再执行循环体,而 do…while 会无条件执行一次循环体后再判断条件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKNTHiCt-1610438290544)(assets/image-20201002175531921.png)]

    语法格式:
    
    do {
        循环体
    	...
    } while (循环条件);
    
    var num = 5;
    do {
        console.log(num);
        num--;
    } while (num > 3);
    
    // 结果输出为 5 4
    
  3. for 循环

    for循环语句是最常用的循环语句,它适合循环次数已知的情况

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0SOCIWE-1610438290546)(assets/image-20201002175720525.png)]

    for 关键字后面小括号中包含了3部分内容,分别为初始化表达式、循环条件 和 操作表达式,它们之间用 “;” 隔开,{}中的执行语句为循环体

    语法格式:
    for (初始化表达式; 循环条件; 操作表达式) {
        循环体
        ...
    }
    
    for (var i=i; i<100; i++) {
        console.log(i);		// 循环体
    }
    
let 关键字

let 不存在预解析,var 存在预解析

consol.log(age);	// undefined
var age = 18;

console.log(num);	// 报错
let num = 10;

let 是局部变量

// var
for(var i=0; i<10; i++) {}
console.log(i);	// 10

// let
for(let i=0; i<10; i++) {}
console.log(i);	// 报错

let 有块级作用域

// var
for(var i=0; i<10; i++) {
    arr[i] = function() {
        console.log(i);
    }
}
console.log(arr);
// 执行 arr[0]
arr[0]();	// 10
arr[1]();	// 10


// let
for(let i=0; i<10; i++) {
    arr[i] = function() {
        console.log(i);
    }
}
console.log(arr);
// 执行 arr[0]
arr[0]();	// 0
arr[1]();	// 1


}


~~~JavaScript
for (var i=i; i<100; i++) {
    console.log(i);		// 循环体
}
let 关键字

let 不存在预解析,var 存在预解析

consol.log(age);	// undefined
var age = 18;

console.log(num);	// 报错
let num = 10;

let 是局部变量

// var
for(var i=0; i<10; i++) {}
console.log(i);	// 10

// let
for(let i=0; i<10; i++) {}
console.log(i);	// 报错

let 有块级作用域

// var
for(var i=0; i<10; i++) {
    arr[i] = function() {
        console.log(i);
    }
}
console.log(arr);
// 执行 arr[0]
arr[0]();	// 10
arr[1]();	// 10


// let
for(let i=0; i<10; i++) {
    arr[i] = function() {
        console.log(i);
    }
}
console.log(arr);
// 执行 arr[0]
arr[0]();	// 0
arr[1]();	// 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤安先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值