前端学习笔记之JS基础语法与表达式(五)

JS基础语法与表达式

JavaScript简介

前端三剑客

  • HTML
  • CSS
  • JavaScript
语言功能
结构层HTML搭建结构、放置部件、描述语义
样式层CSS美化页面、实现布局
行为层JavaScript实现交互效果、数据收发、表单验证等

JavaScript历史

  • NetScape公司的Brendan Eich于1995年发明JavaScript,前身是LiveScript
  • 浏览器脚本还有VBScript、JScript但都被淘汰了

JavaScript体系

  • Javascript
    • 语言核心
      • ECMAScript5
      • ECMAScript6、7、8、9
    • DOM
    • BOM

JavaScript语法与变量

JavaScript的书写位置

  • <body><script>标签,在内部书写JavaScript代码
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<script type="text/javascript">
		// code here
	</script>
</body>
</html>
  • 将代码单独保存为.js格式文件,然后在HTML文件中引入它
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<script type="text/javascript" src="index.js"></script>
</body>
</html>

认识输出语句

  • alert()语句 - 弹出警告框
  • console.log()语句 - 控制台输出

在这里插入图片描述

学会处理报错

  • alert(慕课网); 忘记用引号包裹
    • Uncaught ReferenceError: 慕课网 is not defined未捕获的引用错误:慕课网没有被定义
  • alret(慕课网); 错误拼写alert
    • Uncaught ReferenceError: alret is not defined 未捕获的引用错误:alret没有被定义

REPL环境

  • 控制台也是一个REPL环境,可以使用它临时测试表达式的值
在这里插入图片描述

变量

变量是什么
  • 变量是在内存中存储值的符号
  • 变量不是数值本身,它们仅仅是一个用于存储数值的容器
定义变量
  • 要想使用变量,第一步就是声明它,并给它赋值

变量的使用
  • 当变量被赋值后,就可以使用它了
在这里插入图片描述
变量的默认值
  • 一个变量只定义,但没有赋初值,默认值是undefined
  • 一个变量只有被var定义,并赋初值之后,才算正式初始化完成
var a = 10;
console.log(a); // undefined
a = 10;
console.log(a); // 10
变量的常见错误
  • 不用var定义,而直接将值赋予它,虽不引发报错,但会产生作用域问题。
a = 10;
console.log(a); // 10    ×定义变量时必须要写var
  • 尝试使用一个既没有被var定义过,也没有赋过值的字符,就会产生引用错误。
console.log(b);   // Reference Error
变量的合法命名
  • 只能由字母、数字、下划线、$组成,但不能以数字开头
  • 不能是关键字或保留字
  • 大小写敏感,a和A两个不同的变量
  • 以上是标识符的命名规则,同时函数、类名、对象的属性等也都要遵守这个命名规则
变量的合/非法命名
  • 合法命名举例
    • immoc、aBc_123、 $2 $o0_0o$ $
  • 非法命名举例
    • 8m、aBc#123、 ¥2、 true
优秀的变量命名法
  • 驼峰命名法:mathTestScore 不建议的命名:mathtestscore
  • c风格: math_test_score
  • 匈牙利命名法:iMathTestScore [这里的i是提示变量类型]
变量的值
  • 变量的值可以被改变
var a = 10;
a = 18;   //改变变量的值,不需要再次书写var
console.log(a); // 18
  • JS中的等号表示赋值
var a = 10;
a = a + 1;
console.log(a);
  • 使用逗号同时声明和初始化两个变量
var a=0,b=0,c=0;
变量声明提升
  • 变量声明的提升:你可以提前使用一个稍后才声明的变量,而不会引发异常
  • 变量声明提升时,只提升变量的定义,不会提升它的值

注意:

  • 变量声明的提升是JavaScript的特性,所以经常出面试题
  • 在实际开发时,一定要先定义并给变量赋初值,然后再使用变量

JavaScript基本数据类型

数据类型简介和检测

typeof运算符

  • 使用typeof运算符可以检测值或者变量的类型
typeof 5; // number
typeof '慕课网'; // string
var a = 12;
var b = '慕课网';
console.log(typeof a); // number
console.log(typeof b); // string

5种基本数据类型的typeof检测结果

在这里插入图片描述

typeof NaN;  //"number"

Number(数字)类型

  • 所有数字不分大小、不分整浮、不分正负,都是数字类型
typeof 925; //number
typeof 3.13; //number
typeof -6; //number
.5; //0.5  介于0和1之间的小数,可以不书写0
typeof .5; //number
科学计数法
  • 较大数或较小数(绝对值较小)可以写成科学计数法
3e8; //300000000
typeof 3e8; //number
3e-4; //0.0003
typeof 3e-8; //number
不同进制的数字
  • 二进制数值以0b开头

    0b10 //2

    0b1111 //15

  • 八进制数值以0开头

    017 //15

  • 十六进制数字以0x开头

    0xf //15

一个特殊的数字型值NaN
  • NaN是英语“not a number”的意思,即“不是一个数”,但它是一个数字类型的值

    typeof NaN;     //number
    
  • 0除以0的结果是NaN,事实上,在数学运算中,若结果不能得到数字,其结果往往都是NaN

  • NaN有一个“奇怪”的性质:不自等。

String(字符串)类型

  • 字符串就是“人类的自然语言”

  • 字符串要用引号包裹,双引号或者单引号均可

    typeof "慕课网"; // string
    typeof '慕课网'; // string
    
  • 数字11和字符串’11’在语义上是不同的,前者表达一个数量,后者是一个文本

    typeof 11; //number
    typeof '11'; //string
    
字符串的拼接
  • 加号可以用来拼接多个字符串

    'imo' + 'oc'    //  'imooc'
    
  • 要将一个变量的值“插入”到字符串中,要“斩断链接”。

在这里插入图片描述

  • 新版ES中增加了反引号表示法,可以更方便进行变量插值。

  • 一些时候需要使用空字符串,直接书写闭合的引号对即可

    var str = '';
    
字符串的length属性
  • 字符串的length 属性表示字符串的长度

    '我喜欢JS'.length // 5
    '我喜欢JS,我也喜欢HTML'.length // 14
    ''.length // 0
    
字符串的常用方法
  • “方法”就是能够打点调用的函数,字符串有丰富的方法

在这里插入图片描述

charAt()方法
  • charAt()方法可以得到指定位置的字符
'我喜欢JS,我也喜欢HTML'.charAt(0) // '我'
'我喜欢JS,我也喜欢HTML'.charAt(11) // 'T'
'我喜欢JS,我也喜欢HTML'.charAt(74) // ''
substring()、substr()和slice()方法
  • substring(a, b) 方法得到从a开始到b结束(不包括b处)的子串
'我喜欢JS,我也喜欢HTML'.substring(3, 5) // 'JS'
'我喜欢JS,我也喜欢HTML'.substring(10, 14) // 'HTML'
  • substring(a, b) 方法如果省略第二个参数,返回的子串会一直到字符串的结尾
'我喜欢JS,我也喜欢HTML'.substring(6) // '我也喜欢HTML'
  • substring(a, b) 中,a可以大于b,数字顺序将自动调整为小数在前
'我喜欢JS,我也喜欢HTML'.substring(5, 3) // 'JS'
  • substr (a, b)中,将得到从a开始的长度为b的子串
'我喜欢JS,我也喜欢HTML'.substr(3, 2) // 'JS'
  • substr(a, b)中,b可以省略,表示到字符串结尾
'我喜欢JS,我也喜欢HTML'.substr(3) // 'JS,我也喜欢HTML'
  • substr (a, b)中,a可以是负数,表示倒数位置
'我喜欢JS,我也喜欢HTML'.substr(-4, 2) // 'HT'
  • slice(a, b)方法得到从a开始到b结束(不包括b处)的子串
'我喜欢JS,我也喜欢HTML'.slice(3, 5) // 'JS'
  • slice(a, b)的参数a可以是负数
'我喜欢JS,我也喜欢HTML'.slice(-4, -1) // 'HTM'
  • slice(a, b)中,参数a必须小于参数b
'我喜欢JS,我也喜欢HTML'.slice(5, 2) // ''
  • 对比总结
    • substring(a, b)和slice(a, b)功能基本一致,都是得到从a开始到b
      结束(不包括b)的子串,区别:
      • ① substring()可以自动交换两个参数位置,而slice()不行;
      • ②slice()的参数a可以是负数,而substring()不行。
    • substr(a, b)中参数b是子串长度,而不是位置编号
toUpperCase()和toLowerCase()
  • toUpperCase() 转为大写
  • toLowerCase() 转为小写
'i love you'.toUpperCase(); // 'I LOVE YOU'
'IMOOC'.toLowerCase(); // 'imooc'
indexOf()
  • indexOf()方法返回某个指定的字符串值在字符串中首次出现的位置
  • 如果要检索的字符串值没有出现,则该返回 -1
'abcdeb'.indexOf('b') // 1
'abcdeb'.indexOf('de') // 3
'abcdeb'.indexOf('m') // -1

Boolean(布尔)类型

  • 布尔(Boole·George)英国19世纪数学家及逻辑学家。
  • 布尔型值只有两个:true和false,分别表示真和假.
typeof true; //boolean
typeof false; //boolean

Undefined类型

  • 一个没有被赋值的变量的默认值是undefined,而undefined的类型也是undefined
  • 即:undefined又是值,又是一种类型,这种类型只有它自己一个值
typeof undefined     //undefined
  • 在变量声明提升时,变量的值也是undefined。
console.log(a); //undefined
console.log(typeof a); //undefined
var a = 10;

null类型

  • null表示“空”,它是“空对象”
  • 当我们需要将对象销毁、数组销毁或者删除事件监听时,通常将它们设置为null。
box.onclick = null;
  • 使用typeof检测null值,结果是object,这点尤其要注意
typeof null;   //object
  • 类型和typeof检测结果并不总是一一对应,比如数组用typeof检测结果也是object
  • JavaScript可能看起来“千疮百孔”,一定需要刻意记忆。这些点往往也是面试常考的。

在这里插入图片描述

数据类型的转换

其他值 -> 数字
使用Number() 函数

parseInt()函数的功能是将字符串转为整数

在这里插入图片描述

parseFloat()函数的功能是将字符串转为浮点数

在这里插入图片描述

其他值 -> 字符串
使用String()函数

使用toString()方法
  • 几乎所有值都有toString()方法,功能是将值转为字符串
var a = 1;
a.toString();  //"1" 
  
(1).toString();  //"1"  单独使用数字时需要加括号
其他值 -> 布尔值
使用Boolean ()函数

image-20210706150718862

小案例:小小计算机
var a = Number(prompt("请输入a的值"));
var b = Number(prompt("请输入b的值"));
alert(a+b);

复杂数据类型

  • 除基本类型值外,JS的世界中还有复杂数据类型。

    [1,2,3]、{a:1,b:2}、function(){}

  • 复杂数据类型都是“引用类型”。

表达式和运算符

  • 表达式种类有算术、关系、逻辑、赋值、综合

算数表达式

算数运算符
  • 加、减、乘、除、取余
加减乘除
  • 加减的符号和数学一致,乘法是*号,除法是/号
  • 默认情况,乘除法的优先级要高于加法和减法;必要时可以使用圆括号来改变运算的顺序

在这里插入图片描述

加号的两种作用
  • 加号有“加法”和“连字符”两种作用
  • 如果加号两边的操作数都是数字,则为“加法”,否则为连字符
1+2;  //3
1+'2' //'12'
'1'+'2' //'12'
取余运算
  • 取余运算也叫作“求模运算”,用百分号“%”表示
  • a % b表示求a除以b的余数,它不关心整数部分,只关心余数

在这里插入图片描述

隐式类型转换
  • 如果参与数学运算的某操作数不是数字型,那么JavaScript会自动将此操作数转换为数字型
3*'4'; //12
6/'2'; //3
6-'2' //4
4+'2' //42
5*'ab' //NaN
  • 隐式转换的本质是内部调用Number()函数
true + true //2
false + 2 //2
3 * '2天' //NaN
有关IEEE754
  • 在JavaScript中,有些小数的数学运算不是很精准
  • JavaScript使用了IEEE754二进制浮点数算术标准,这会使一些个别的小数运算产生“丢失精度”问题
  • 解决办法:在进行小数运算时,要调用数字的toFixed()方法保留指定的小数位数
0.1 + 0.2 // 0.30000000000000004
(0.1+0.2).toFixed(2)  //0.30
幂和开根号
  • JavaScript中没有提供幂计算、开根号的运算符。需要使用Math对象的相关方法进行计算。
Math.pow(2, 3) // 8 2^3
Math.pow(3, 2) // 9 3^2
Math.sqrt(81) // 9
Math.sqrt(-81) // NaN
向上取整和向下取整
  • Math.ceil() 向上取整; Math.floor()向下取整
Math.ceil(2.4) // 3
Math.floor(2.4) // 2
Math.ceil(-2.4) // -2
Math.floor(-2.4) // -3
Math.ceil(2) // 2
Math.floor(2) // 2

关系表达式

在这里插入图片描述

大于和小于
  • 大于>、小于<两个符号和数学相同
  • “大于等于”运算符是>=,“小于等于”运算符是<=
判断是否相等
  • 如果想比较两个值是否相等,此时应该使用==运算符
  • JavaScript中等号=表示赋值,而并不是相等。判断相等应该使用==运算符
3 == 3 // true
3 === 3 // true
3 = 3 // 错误语句
null == undefined // true
null == 0 // false
NaN == NaN // false
相等和全等
  • 两个等号==运算符不比较值的类型,它会进行隐式转换后比较值是否相等
  • 三个等号===运算符,不仅比较值是否相同,也比较类型是否相同
5 == '5'; // true
5 === '5'; // false
1 == true // true
1 === true // false
0 == false // true
0 === false // false
0 == undefined // false
0 === undefined // false
undefined == null // true
undefined === null // false
NaN不自等
  • NaN作为一个特殊的数字类型值,它在用==比较的时候也有特殊的结果
NaN == NaN   //false;
NaN === NaN  //false;
如何判断某变量值为NaN
  • isNaN()函数可以用来判断变量值是否为NaN
isNaN(NaN) // true
isNaN(5) // false
  • 但isNaN()也不好用,它的机理是:只要该变量传入Number()的执行结果是NaN,则isNaN()函数都会得到true
isNaN(undefined) // true
isNaN('3天') // true
isNaN(null) // false
不相等和不全等
  • !=表示不相等,!==表示不全等
  • JS中没有连比
5 != 6 // true
5 !== 6 // true
5 != '5' // false
5 !== '5' //true

逻辑表达式

逻辑运算符
意义运算符
! (单目运算符)
&&
||
非运算
  • !表示“非”,也可以称为“置反运算”
  • !是一个“单目运算符”,只需要一个操作数
  • 置反运算的结果一定是布尔值
!true // false
!false // true
!!true // true
!0 // true
!undefined // true
!'' // true
!'imooc' // false
!!0 // false
!!'' // false
!!'imooc' // true
与、或运算
  • &&表示“并且”,称为“与运算”,口诀:都真才真
true && true // true
true && false // false
false && true // false
false && false // false
  • ||表示“或者”,称为“或运算”,口诀:有真就真
true || true //true
true || false //true
false || true //true
false || false //false
短路计算
  • a && b运算中:a真,表达式值为b;a假,表达式值为a
  • a || b运算中:a真,表达式值为a;a假,表达式值为b
  • 不需要背诵和记忆规律,遇见题目只需要“现场分析”即可
  • 短路计算在工作编程中很有用,在后续课程讲解

在这里插入图片描述

3 && 6 // 6
undefined && 15 // undefined
15 && undefined // undefined
null && 2 // null
'' && 16 // ''
NaN && undefined // NaN

在这里插入图片描述

3 || 6 // 3
0 || 6 // 6
null || undefined // undefined
'a' || 'b' // 'a'
NaN || null // null
逻辑运算顺序
  • 逻辑运算的优先级是:
    • 非 → 与 → 或!true
!true || true // true
3 && 4 || 5 && 6 // 4

赋值表达式

在这里插入图片描述

  • JS中,=表示赋值,==判断是否相等(不判断类型),===判断是否全等
  • 赋值运算符会将等号右边的数值,赋予等号左边的变量
赋值运算也产生值
  • 赋值运算也产生值,等号后面的值将作为“赋值运算的值”
var a;
console.log(a=4); //4
  • 这就意味着,可以连续使用赋值运算符
var a, b, c;
a = b = c = 15;
console.log(a); // 15
console.log(b); // 15
console.log(c); // 15
快捷赋值
  • 快捷赋值运算符表示在原数值基础上进一步进行运算
var a = 3;
a += 5; // 等价于a = a + 5
console.log(a); // 8
var b = 14;
b /= 2; // 等价于b = b / 2
console.log(b); // 7
var c = 16;
c %= 3; // 等价于c = c % 3
console.log(c); // 1
自增/自减运算符
  • a++ 先用再加; ++a 先加再用

在这里插入图片描述

综合表达式

  • 运算顺序: 非运算 → 算术运算 → 关系运算 → 逻辑运算

在这里插入图片描述

  • 验证变量a是否介于5到12之间

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python学习笔记|字符串与正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反转,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串和正则表达式练习题的答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反转字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串和正则表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值