From 4c6647239d8470cdff61ae847009592f7da1d00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=88=92=E6=B1=B6?= <3228916049@qq.com> Date: Sat, 28 Oct 2023 10:31:39 +0000 Subject: [PATCH] =?UTF-8?q?10.27=E5=9F=BA=E7=A1=80=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李舒汶 <3228916049@qq.com> --- ...72\347\241\200\347\273\203\344\271\240.md" | 752 ++++++++++++++++++ 1 file changed, 752 insertions(+) create mode 100644 "49 \346\235\216\350\210\222\346\261\266/10.27\345\237\272\347\241\200\347\273\203\344\271\240.md" diff --git "a/49 \346\235\216\350\210\222\346\261\266/10.27\345\237\272\347\241\200\347\273\203\344\271\240.md" "b/49 \346\235\216\350\210\222\346\261\266/10.27\345\237\272\347\241\200\347\273\203\344\271\240.md" new file mode 100644 index 0000000..2e24069 --- /dev/null +++ "b/49 \346\235\216\350\210\222\346\261\266/10.27\345\237\272\347\241\200\347\273\203\344\271\240.md" @@ -0,0 +1,752 @@ +### 在 JavaScript 中有 8 种基本的数据类型(7 种原始类型和 1 种复杂类型) + +```js +Number 代表数据类型是数值 + +* 整数 +* 浮点 +* 数组 + +String 代表字符串 + +Boolean 布尔型 + +* true +* false + +Undefined 变量未赋值 = 变量未定义 a is not define + +Null 空值 + +Object 对象 + +function 函数 + +BigInt(后续了解)大整数类型 + +Symbol(后续了解)符号类型 +``` + +### typeof操作符 + +```js +一个值使用 typeof 操作符会返回下列字符串之一: +"undefined"表示值未定义; +"boolean"表示值为布尔值; +"string"表示值为字符串; +"number"表示值为数值; +"object"表示值为对象(而不是函数)或 null; +"function"表示值为函数; +“symbol”表示值为符号; + +typeof()的用法: +你可能还会遇到另一种语法:typeof(x),它与 typeof x 相同; +typeof是一个操作符,并非是一个函数,()只是将后续的内容当做一个整体而已; +``` + +### Number类型(一) + +```js +number 类型代表整数和浮点数 + var age = 18; +var height = 1.88; + + +数字number可以有很多操作,比如,乘法 *、除法 /、加法 +、减法 - 等等。 +var result1 = 10*2; +var result2 = 10\3; + + +除了常规的数字,还包括所谓的“特殊数值(“special numeric values”)”也属于Number类型(了解) + + +Infinity:代表数学概念中的 无穷大 ∞,也可以表示-Infinity; +✓ 比如 1/0 得到的就是无穷大; + + +NaN:NaN 代表一个计算错误,它是一个错误的操作所得到的结果; +✓ 比如 字符串和一个数字相乘; + + +``` + +### Number类型(二) + +```js +十进制(掌握)、十六进制、二进制、八进制 +1.十进制 +var num1 =111; +2.十六进制 +var num2 =0x111; +3.八进制 +var num3 =0o111; +4.二进制 +var num4 =0b111; +console.log(num1,num2,num3,num4) + + +Number 类型的最大和最小值 +console.log(number.min_value);5e-324 +console.log(number.max_value); 1.7976931348623157e+308 + +isNaN +判断是不是数值,不是数值为 true 是数值为 false + + +``` + +### String类型(一) + +```js +JavaScript 中的字符串必须被括在引号里,有三种包含字符串的方式。 +1.双引号:"Hello" +2.单引号:'Hello’ +3.反引号:`Hello` +var name ="张三" +var add ="北京" +var des ="文字" + +前后的引号类型必须一致: +1.如果在字符串里面本身包括单引号,可以使用双引号; +2.如果在字符串里面本身包括双引号,可以使用单引号; +var message = "我是'张三" +``` + +### 字符串中的转义字符 + +```js +转义字符串 +\ ' 单引号 +\ '' 双引号 +\t 制表,缩进 +\n 换行 + +``` + +### 字符串的属性和方法 + +```js +在 + 加号的左右两边只要出现一个字符串,这个 + 加号就不是加法运算,而是拼接字符串,而且得到一个新的字符串 +这里我们先掌握几个基本的字符串使用操作: +操作一:字符串拼接,通过+运算符(后续还会详细讲解) +var str1 = "H" +var str2 ="O" +var newStr = str1+str2 //HO +操作二:获取字符串长度 +console.log(变量名1,length); // 返回的字符数 + +强制转成数值,不然结果为11 +console.log(number('1')+1); // 2 + +转换数值 +number(true); // 1 +number(false); // 0 +number(null); // 0 +number(undefined); // NaN +number(''); // 0 + +转换字符串 +0、null、undefined、NaN、'' 转成字符串为false,其他的为true +``` + + + +### Boarolean类型 + +```js +Boolean(布尔)类型用于表示真假: +比如是否毕业. 是否有身份证. 是否购买车票. 是否成年人; +比如开发中,我们会判断一个账号是否登录、是否是管理员、是否具备某个权限、是否拥有某个英雄、皮肤等; +布尔(英语:Boolean)是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名。 +Boolean 类型仅包含两个值:true 和 false。 +var isLogin =false; +var flag = true; +var result = 1 == 1; +``` + +### Undefined类型 + +```js +Undefined 类型只有一个值,就是特殊值 undefined。 +如果我们声明一个变量,但是没有对其进行初始化时,它默认就是undefined; +var message +console.log(message)//Undefined +console.log(message === Undefined)// true + +var info; +var info = Undefined; +这里有两个注意事项: +注意一:最好在变量定义的时候进行初始化,而不只是声明一个变量; +注意二:不要显示的将一个变量赋值为undefined +✓ 如果变量刚开始什么都没有,我们可以初始化为0、空字符串、null等值; + +``` + +### Object类型 + +```js +Object 类型是一个特殊的类型,我们通常把它称为引用类型或者复杂类型; +1.其他的数据类型我们通常称之为 “原始类型”,因为它们的值质保函一个单独的内容(字符串、数字或者其他); +2.Object往往可以表示一组数据,是其他数据的一个集合; +3.在JavaScript中我们可以使用 花括号{} 的方式来表示一个对象; +var info = { + name:"why", + age: 18, + height: 1.88 +} + +Object是对象的意思,后续我们会专门讲解面向对象的概念等; +``` + + + +### Null类型 + +```js +Null 类型同样只有一个值,即特殊值 null。 +null类型通常用来表示一个对象为空,所以通常我们在给一个对象进行初始化时,会赋值为null; +console.log(typeof null);//object +var obj = null; +obj = { + name:"why", + age: 18 +} + +null和undefined的关系: +1.undefined通常只有在一个变量声明但是未初始化时,它的默认值是undefined才会用到; +2.并且我们不推荐直接给一个变量赋值为undefined,所以很少主动来使用; +3.null值非常常用,当一个变量准备保存一个对象,但是这个对象不确定时,我们可以先赋值为null; +``` + + + +### 数据类型总结 + +```js +JavaScript 中有八种基本的数据类型(前七种为基本数据类型,也称为原始类型,而 object 为复杂数据类型,也称为引用类 +型)。 + 1.number 用于任何类型的数字:整数或浮点数。 + 2.string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。 + 3.boolean 用于 true 和 false。 + 4.undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。 + 5.object 用于更复杂的数据结构。 + 6.null 用于未知的值 —— 只有一个 null 值的独立类型。 + + + 后续学习的类型: + symbol 用于唯一的标识符。 + bigint 用于任意长度的整数。 + +``` + + + +### 数据类型的转换 + +```js +在开发中,我们可能会在不同的数据类型之间进行某些操作 +比如把一个String类型的数字和另外一个Number类型的数字进行运算; +比如把一个String类型的文本和另外一个Number类型的数字进行相加; +比如把一个String类型或者Number类型的内容,当做一个Boolean类型来进行判断; + + +也就是在开发中,我们会经常需要对数据类型进行转换: +大多数情况下,运算符和函数会自动将赋予它们的值转换为正确的类型,这是一种隐式转换; +我们也可以,通过显示的方式来对数据类型进行转换; + + +接下来我们来看一下数据类型之间的转换: +String、Number、Boolean类型; +``` + + + +### 字符串String的转换 + +```js +其他类型经常需要转换成字符串类型,比如和字符串拼接在一起或者使用字符串中的方法。 + + +转换方式一:隐式转换 +一个字符串和另一个字符串进行+操作; +✓ 如果+运算符左右两边有一个是字符串,那么另一边会自动转换成字符串类型进行拼接; +某些函数的执行也会自动将参数转为字符串类型; +✓ 比如console.log函数; + + +转换方式二:显式转换 +调用String()函数; +调用toString()方法; + +``` + + + +### 数字类型Number的转换 + +```js +其他类型也可能会转成数字类型。 +转换方式一:隐式转换 +在算数运算中,通常会将其他类型转换成数字类型来进行运算; +✓ 比如 "6" / "2"; +✓ 但是如果是+运算,并且其中一边有字符串,那么还是按照字符串来连接的; +转换方式二:显式转换 +我们也可以使用Number()函数来进行显式的转换; +其他类型转换数字的规则: +数字类型Number的转换 +值 undefined null true 和 false string +转换后的值 NaN 0 1 and 0 去掉首尾空格后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结 +果为 0。否则,将会从剩余字符串中“读取”数字。当类型转换出现 error 时返回 NaN。 + + +``` + + + +### 布尔类型Boolean的转换 + +```js +布尔(boolean)类型转换是最简单的。 +它发生在逻辑运算中,但是也可以通过调用 Boolean(value) 显式地进行转换。 +转换规则如下: +1.直观上为“空”的值(如 0、空字符串、null、undefined 和 NaN)将变为 false。 +2.其他值变成 trlean的转换 +1.值 0, null, undefined, NaN, "" +转换后 false + +2.其他值 +转换后 true + + +注意:包含 0 的字符串 "0" 是 true +一些编程语言(比如 PHP)视 "0" 为 false。但在 JavaScript 中,非空的字符串总是 true。 + +``` + + + +### 变量的声明:在 var 关键字 + +```js +// 定义变量同时赋值 +var name = ' 内容'; + +// 先定义再赋值 +var hobby; +hobby = '内容'; + +// 同时定义多个变量 +var a,b,c; +a=1,b=3,c=5; + +// 变量之间用;逗号隔开,分号结束 +var c=1,b=2,c=3; + +//不能用js关键字和保留字做变量名和常量名 +``` + +var var1=10; 基本上所有的编程语言,都不允许变量的开始有数字,前面可以用美元符合$,下划线__,字母v。 + + + +Js代码在HTML内部写法,需要先写 + + + + + + + + + + + + + + + + +``` + +常见的运算符 +----- + +| 运算符 | 运算规则 | 范例 | 结果 | +| --- | ------ | -------- | ---- | +| + | 加法 | 2 + 3 | 5 | +| + | 连接字符串 | ‘中’+ ‘国’ | ‘中国’ | +| - | 减法 | 2 - 3 | -1 | +| * | 乘法 | 2 * 3 | 6 | +| / | 除法 | 5 / 2 | 2.5 | +| % | 取余数 | 5 % 2 | 1 | +| ** | 幂(ES7) | 2 ** 3 | 8 | + +### 取余 % 和 求幂 + +取余运算符是 %,尽管它看起来很像百分数,但实际并无关联 + +a % b 的结果是 a 整除 b 的 余数 + +console.log(10%3) +VM72:1 1 +undefined + +求幂运算 a ** b 将 a 提升至 a 的 b 次幂。(ES7中的语法,也叫做ES2016) + +在数学中我们将其表示为 a的b次方 + +console.log(2**3); +VM127:1 8 +undefined +console.log(2**4); +VM140:1 16 +undefined + +### 原地修改(Modify-in-place) + +| 运算符 | 运算规则 | 范例 | 结果 | +| --- | ---------- | -------------- | --- | +| = | 赋值 | a = 5 | 5 | +| += | 加后赋值 | a = 5, a += 2 | 7 | +| -= | 减后赋值 | a = 5, a -= 2 | 3 | +| *= | 乘后赋值 | a = 5; a *= 2 | 10 | +| /= | 除后赋值 | a = 5; a /= 2 | 2.5 | +| %= | 取模 (余数)后赋值 | 5 % 2 | 1 | +| **= | 幂后赋值 | a = 5; a **= 2 | 25 | + +### 自增、自减 + +对一个数进行加一、减一是最常见的数学运算符之一。 + +所以,对此有一些专门的运算符: + +自增 ++ 将变量加1; + +自减 -- 将变量减1; + +自增/自减只能应用于变量。 + +将其应用于数值(比如 5++)则会报错。 自增、自减 coderwhy + +运算符 ++ 和 -- 可以置于变量前,也可以置于变量后。 + +当运算符置于变量后,被称为“后置形式”(postfix form):counter++。 + +当运算符置于变量前,被称为“前置形式”(prefix form):++counter。 + +两者都做同一件事:将变量 counter 与 1 相加。 + +### 比较运算符 + +比较运算符的结果都是Boolean类型的 + +| 运算符 | 运算规则 | 范例 | 结果 | +| --- | ---- | ------ | ----- | +| == | 相等 | 4 == 3 | false | +| != | 不等于 | 4 != 3 | true | +| > | 小于 | 4 > 3 | true | +| < | 大于 | 4 < 3 | false | +| >= | 小于等于 | 4 <= 3 | false | +| <= | 大于等于 | 4 >= 3 | true | + +### 和 == 的区别 + +普通的相等性检查 == 存在一个问题,它不能区分出 0 和 false,或者空字符串和 false这类运算: + +这是因为在比较不同类型的值时,处于判断符号 == 两侧的值会先被转化为数字; + +空字符串和 false 也是如此,转化后它们都为数字 0; + +严格相等运算符 === 在进行比较时不会做任何的类型转换; + +换句话说,如果 a 和 b 属于不同的数据类型,那么 a === b 不会做任何的类型转换而立刻返回 false; + +### 分支语句和逻辑运算符 + +### 单分支语句:if + +if(...) 语句计算括号里的条件表达式,如果计算结果是 true,就会执行对应的代码块。 + +案例一: 如果小明考试超过90分, 就去游乐场 + +“如果”相当于JavaScript中的关键字if 分数超过90分是一个条件(可以使用 > 符号) + +测试分数 + + +案例二:单位5元/斤的苹果,如果购买超过5斤,那么立减8元 + +注意:这里我们让用户输入购买的重量,计算出最后的价格并且弹出结果 + +计算价格 + + + +补充一:如果代码块中只有一行代码,那么{}可以省略: + +补充二:if (…) 语句会计算圆括号内的表达式,并将计算结果转换为布尔型(Boolean)。 + +转换规则和Boolean函数的规则一致; + +数字 0、空字符串 “”、null、undefined 和 NaN 都会被转换成 false。 因为它们被称为“假值(falsy)”; + +其他值被转换为 true,所以它们被称为“真值(truthy)”; + +### 多分支语句:if.. else.. + +案例一:如果分数超过90分去游乐场,否则去上补习班 + +满足条件时,做某些事情 + +不满足(else),去做另外一些事 + +测试分数 + + +案例二:m=20,n=30,比较两个数字的大小,获取较大的那个数字 + + var m=20,n=30; + if(m>n){ + alert('m>n'); + }else{ + alert('n>m'); + } + +### 多分支结构: if.. else if.. else + +多分支结构: if.. else if.. else.. + +有时我们需要判断多个条件; + +我们可以通过使用 else if 子句实现; + +案例: 分数评级: + +考试分数大于90:优秀 + +大于80小于等于90:良好 + +大于60小于等于80:合格 + +小于60分:不及格 + +分数评级 + + + +### 三元运算符 + +var result = condition ? value1 : value2; +// 计算条件结果,如果结果为真,则返回 value1,否则返回 value2。 + +案例一: m=20,n=30,比较两个数字的大小,获取较大的那个数字 + +var res = m>n?'m大':'n大'; +alert(res); + +案例二:判断一个人是否是成年人了 + +var age = prompt('年龄') +var res2 = age>=18 ? '成年':'未成年'; +alert(res2); + +### 认识逻辑运算符 + +| 运算符 | 运算规则 | 范例 | 结果 | +| --- | ------- | ------------- | ----- | +| && | 与: 同时为真 | false && True | false | +| \| | 或: 一个为真 | false or true | true | +| ! | 非: 取反 | !false | true | + +### switch语句 + +case穿透问题: 一条case语句结束后,会自动执行下一个case的语句; + +这种现象被称之为case穿透;break关键字 + +通过在每个case的代码块后添加break关键字来解决这个问题; + +注意事项:这里的相等是严格相等。 + +被比较的值必须是相同的类型才能进行匹配。 + +## while和for循环 + +### while循环 + +当条件成立时,执行代码块; + +当条件不成立时,跳出代码块; + +如果条件一直成立(为true),那么会产生死循环。 + +这个时候必须通过关闭页面来停止死循环; + +开发中一定要避免死循环的产生; while循环 coderwhy + +while循环的练习题目: + +练习一:打印10次Hello World + var i=1; + while(i<10){ + document.write('

Hello World

') + i++; + } + +练习二:打印0~99的数字 + var i=1; + while(i<100){ + document.write(i+'\n'); + i++; + } + +练习三:计算0~99的数字和 + var i=1; + var s=0; + while(i<100){ + s=s+i; + i++; + } + alert(s); + +练习四:计算0~99所有奇数的和 + var i=1; + var s=0; + while(i<100){ + if (i%2==1){ + s=s+i; + } + i++; + } + alert(s); + +练习五:计算0~99所有偶数的 + var i=1; + var s=0; + while(i<100){ + if (i%2==0){ + s=s+i; + } + i++; + } + alert(s); + +### do..while循环 + +do..while循环和while循环非常像,二者经常可以相互替代(不常用) + +但是do..while的特点是不管条件成不成立,do循环体都会先执行一次; + +通常我们更倾向于使用while循环。 + +### for循环 + +| 语句段 | 例子 | 执行过程 | +| --------- | --------- | -------------------------- | +| begin | let i = 0 | 进入循环时执行一次 | +| condition | i < 3 | 在每次循环迭代之前检查,如果为 false,停止循环 | +| body(循环体) | alert(i) | 条件为真时,重复运行 | +| step | i++ | 在每次循环体迭代后执行 | + +begin 执行一次,然后进行迭代:每次检查 condition 后,执行 body 和 step -- Gitee