JavaScript笔记–ECMAScript
输入输出语句
alert(msg) 浏览器弹出警示框
console.log(msg) 浏览器控制台打印输出信息
prompt(info) 浏览器弹出输入框,用户可以输入(取过来的值是 string)
变量
1、声明变量
var age; // 声明一个名称为age的变量
**var ** 是一个JS关键字,用来声明变量(variable 变量的意思)。使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员管
age 是程序员定义的变量名,我们要通过变量名来访问内存中的分配的空间
2、赋值( = )
age =10 ; //给age 这个变量赋值为10
= 用来把右边的值赋值给左边的变量空间中 此处代表赋值的意思
变量值是程序员保存到变量空间里面的值
3、变量的初始化
var age =18; //声明变量同时赋值为18
声明一个变量并赋值,我们称之为变量的初始化。
小结
- 为什么需要变量?
因为我们一些数据需要保存,所有需要变量
- 变量是什么?
变量就是一个容器,用来存放数据的。方便我们以后使用里面的数据
- 变量的本质是什么?
变量是内存里的一块空间,用来存储数据
声明变量本质是去内存申请空间
- 变量怎么使用?
我们使用变量的时候,一定要声明变量,然后赋值
- 什么是变量的初始化?
声明变量并赋值我们称之为变量的初始化
- 变量命名规范有哪些?
变量名尽量要规范,见名知意----驼峰命名法
要知道哪些变量名不合法
- 交换2个变量值的思路?(三种常见方法)
//声明变量并赋值
var a = 2;
var b = 5;
定义一个中间变量tmp
var tmp = a;
a = b;
b = tmp;
//控制台打印出a = 5, b = 2
console.log(“a=” + a + “,b=” + b);
加减操作赋值
a = a + b;
b = a - b;
a = a- b;
console.log(“a=” + a + “,b=” + b);
运用数组赋值
//将数组[5,2]中索引号为0的元素赋值给a
a = [b, b = a] [0];
console.log(“a=” + a + “,b=” + b);
数据类型
简单数据类型(number,string,boolean,undefined,null)
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含 整形值和浮点型值, 如21、0.21 | 0 |
Boolean | 布尔值类型, 如 true、false 等价于1和0 | false |
String | 字符串类型,如"张三" 注意js里面,字符串都带有引号 | “” |
Undefined | var a ; 声明了变量a但是没有给值,此时a=undefined | undefined |
Null | var a = null; 声明了变量a为空值 | null |
##数字型的最大值和最小值
alert(Number.MAX_VALUE); // 1.7976931348623157e+308 最大值
alert(Number.MIN_VALUE); // 5e-324 最小值
特殊值
alert(Infinity); //Infinity
alert(-Infinity); //-Indinity
alert(NaN); //NaN
- Infinity, 代表无穷大,大于任何数值
- -Infinity, 代表无穷小,小于任何数值
- NaN,Not a number ,代表一个非数值
isNaN() 函数用于检查其参数是否是非数字值。
isNaN() 这个方法用来判断非数字,并且返回一个值 如果是数字返回的是 false ,如果不是数字返回的是 true
var usrAge = 21;
var isOk = isNaN(usAge);
console.log( isOk); // false 21 是一个数字
var usrName = "andy";
console.log(isNaN(usrName)); // true , "andy" 是一个非数字
复杂数据类型(object)
string 字符串
字符串转义符
类似HTML里面的特殊字符,字符串中也有特殊字符,我们称之为转义符。
转义符都是\
开头的,常用的转义符及其说明如下:
.length
检测获取字符串长度
转义符 | 解释说明 |
---|---|
\n | 换行符,n是 newline 的意思 |
\\ | 斜杠\ |
’ | ' 单引号 |
" | " 双引号 |
\t | tab 缩进 |
\b | 空格,b是blank 的意思 |
<script>
//1.检测 字符串长度 length
var str = 'my name is zsls' ;
console.log(str.length); // 15
//2.字符串的拼接 + 只要有字符串和 其他数据类型 相拼接 最终的结果是字符串类型(string)
console.log('沙漠' + '骆驼'); // 字符串 沙漠骆驼
console.log('pink'+ 123); // pink123
console.log('pink'+true); //pinktrue
console.log(12+12); // 24
console.log('12'+12);//1212 string类型
<\script>
布尔型 Boolean
布尔类型只有两个值: ture 和 false ,其中 true 表示真(对),而false 表示假( 错)
布尔型和数字型相加的时候,ture 的值为1,false 的值为0.
console.log(true+1); //2
console.log(false+1); //1
console.log(true+false); //1
undefined 和 null
一个声明后没有被赋值的变量会有一个默认值
undefined
undefined 和数字相加 最后的结果是 NaN
null 空值
获取变量数据类型
typeof
可用来获取检测变量的数据类型
字面量
字面量是在源代码中一个固定的表示法,通俗来说,就是字面量表示如何表达这个值
简单的说
字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量。
字面量分为字符串字面量(string literal )、数组字面量(array literal)和对象字面量(object literal),另外还有函数字面量(function literal)。
示例:
var test="hello world!";
"hello world!" 就是字符串字面量,test 是变量名。
数据类型转换
使用表单、prompt
(prompt() 方法用于显示可提示用户进行输入的对话框)
获取过来的数据默认是字符串类型 此时就不能直接简单的进行加法运算,而需要转换变量的数据类型。通俗的说,就是把一种数据类型的变量转换成另一种数据类型。
转为字符串
方式 | 说明 | 案例 |
---|---|---|
toString() | 转成字符串 | var num = 1; alert(num.toSrting()); |
String() 强制转换 | 转换成字符串 | var num = 1; alert(String(num)); |
加号拼接字符串 | 和字符串拼接的结果都是字符串 | var num = 1; alert(num+“我是字符串”); |
转为数字型 number
方式 | 说明 | 案例 |
---|---|---|
parseInt(string)函数 | 将string类转成 整形数 数值型 | parseInt(‘78’) |
parseFloat(string)函数 | 将string类型转成 浮点数 数值型 | parseFloat(‘78.21’) |
Number()强制转换函数 | 将string类型转换成 数值型 | Number(‘12’) |
js隐式转换(- * / ) | 利用 算数运算符 进行 隐式转换 成数值型 | ‘12’ - 0 |
转为布尔型 Boolean
console.log(Boolean());
方式 | 说明 | 案例 |
---|---|---|
Bootlean()函数 | 其他类型转成布尔值 | Boolean(‘ture’); |
- 代表空、否定的值会被转换为false ,如 “ 、 0 、Nan 、 null 、undefined
- 其余值都会被转换为 true
运算符
由数字、运算符、变量等组成的式子 我们称为表达式 1+1
console.log(1+1); // 2 就是返回值
// 1+1=2
// 在我们程序里面 2=1+1 把我们的右边表达式计算完毕把返回值给左边
var num = 1+1;
递增递减(一元运算符)
如果需要反复给数字变量添加或减去1 ,可以使用递增(++)和递减(–)运算符来完成。
在javascript中,递增(++)和递减(–)既可以放在变量前面,也可以放在变量后面。
放在变量前面时,我们可以称为前置递增(递减)运算符,放在变量后面时,我们可以称为后置递增(递减)运算符
注意:递增和递减 运算符必须和变量配合使用。
- 前置递增和后置递增运算符可以简化代码的编写,让变量的值+1 比以前写法更加简单
- 单独使用时,运算结果相同
- 与其他代码联用时,执行结果会不同
- 后置: 先原值运算,后自加(先人后己)
- 前置:先自加,后运算(先己后人)
- 开发时,大多使用后置递增/减 ,并且代码独占一行,列如:num++ ;或者num–;
比较运算符
概念:比较运算符(关系运算符)是两个数据进行比较时所使用的运算符,比较运算后,会返回一个布尔值(ture/false)作为比较运算的结果
运算符名称 | 说明 | 案例 | 结果 |
---|---|---|---|
< | 小于号 | 1<2 | true |
> | 大于号 | 1>2 | false |
>= | 大于等于号(大于或者等于) | 2>=2 | ture |
<= | 小于等于号(小于或者等于) | 3<=2 | false |
== | 判等于(值相同) | 37==37 | ture |
!= | 不等号 | 37!=37 | false |
=== | 全等 要求值和 数据类型都一致 | 37=== ‘37’ | false |
逻辑预算符
概念: 逻辑运算符是用来进行布尔值运算的运算符,其返回值也是布尔值。开发中经常用于多个条件的判断。
逻辑运算符 | 说明 | 案例 |
---|---|---|
&& | “逻辑与”,简称:“与” and | true&& false |
\\ | “逻辑或”,简称:“或” or | ture\\false |
! | 非 field2 | field3 |
逻辑 非 (!)也叫作取反符,用来取一个布尔值相反的值,如true的相反值是false
var isok =!true;
console.log(isok); //false
短路运算(逻辑中断)
短路运算的原理: 当有多个表达 式 (值)时,左边的表达式可以确定结果时,就不在继续右边的表达式的值。
1.语法: 表达式1 &&
表达式2
如果第一个表达式的值为真,则返回表达式2
如果第一个表达式的值为假,则返回表达式1
2.语法: 表达式1 ||
表达式2
如果第一个表达式的值为真,则返回表达式1
如果第一个表达式的值为假,则返回表达式2
赋值运算符
概念:用来把数据赋值给变量的运算符
赋值运算符 | 说明 | 案例 |
---|---|---|
= | 直接赋值 | var usrName = '我是值' |
+=、-= | 加,减 一个数 后在赋值 | var age=10;age+=5; //15 |
*=、/=、%= | 乘,除,取模 后在赋值 | var age= 2; age*=5; //10 |
运算符优先级
优先级 | 运算符 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++ -- ! |
3 | 算数运算符 | 先 * / % 后 + - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == !== === |
6 | 逻辑运算符 | 先 && 后 || |
7 | 赋值运算符 | = |
8 | 逗号运输符 | , |
流程控制
if else 语句(双分支语句)
执行流程
三元表达式
语法结构:
条件表达式 ? 表达式1 :表达式2
执行思路:
如果条件表达式结果为真 则 返回 表达式1 的值 如果条件表达式结果为假 则返回 表达式2 的值
switch 语法
注意!!!!!:
switch语句 与 if else 语句 区别
1、一般情况下,他们两个语句可以相互替换。
2、switch…case语句通常处理case为比较确定值的情况
,而且if…els…语句更加灵活,常用于范围判断
(大于,小于,等于某个范围)
3、switch语句进行判断后直接执行到程序的条件语句,效率更高。而且if…else语句有几种条件,就得判断多少次。
4、当分支比较少时,if...else
语句的执行效率比switch语句高。
5、当分支比较多时,switch
语句的执行效率比较高,而且结构更清晰。
for 循环
- for循环可以重复执行某些相同代码
- for循环可以重复执行些许不同的代码,因为我们有计数器
- for循环可以重复执行某些操作,比如算术运算符加法操作
- 随着需求增加,双重for循环可以做更多,更好看的效果
- 双重for 循环,外层循环一次,内层for循环全部执行
- for 循环是循环条件和数字直接相关的循环
- 分析要比写代码跟重要
- 一些核心算法想不到,但是要学会,分析它执行过程
- 举一反三,自己经常总结,坐一些相似的案例
while 循环
while语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环
语法结构如下:
while(条件语句){
//循环体代码
}
执行思路:
- 先执行条件表达式,如果结果为ture ,则执行循环体代码;如果为false ,则退出循环,执行后面代码
- 执行循环体代码
- 循环体代码执行完毕后,程序会继续判断执行条件表达式,如果条件仍为true,则会继续执行循环体,直到循环条件为false 时 ,整个循环过程才会结束
do…while 循环
do…while 语句其实是while语句的一个变体。该循环会执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。
do…while 语法结构如下;
do{
//循环体代码-条件表达式为 ture 时重复执行循环体代码
}while(条件表达式)
执行思路:
- 先执行一次循环体代码
- 在执行条件表达式,如果结果为true ,则继续执行循环体代码,如果为false ,则退出循环,继续执行后面代码
注意:先再执行循环体,再判断,我们会发现 do…while循环语句 至少会执行一次循环体代码
小结
- JS中循环有for 、while、do…while
- 三个循环很多情况下都可以相互替代使用
- 如果是用来计次数,跟数字相关的,三者使用基本相同,但是我们更喜欢用for
- while 和 do…while 可以做更复杂的判断条件,比for 循环灵活一些
- while 和 do…while 执行顺序不一样,while 先判断后执行 ,do…while 先执行一次,再判断执行
- while 和 do…while 执行次数不一样,do…while 至少会执行一次循环体,而while 可能一次也不执行
- 实际工作中,我们更常用for 循环语句,它写法更简洁直观,所以这个要重点学习
continue 与 break
continue
:结束当前循环,继续运行剩下的循环
brerak
:结束前面所有循环并退出
数组
数组长度
数组名.length 可以修改数组元素
先修改数组长度,再修改索引号,再修改数组元素
冒泡循环 ★★★★★
函数
(1)function 声明函数的关键字 全部小写
(2)函数是做某件事情,函数名一般是动词 sayHi
(3)函数不调用自己不执行
调用函数
函数名();
调用函数的时候不要忘记小括号 ()
注意 声明函数不调用不执行,只有调用函数才会执行函数代码
利用函数的参数 实现函数重复不同的代码
function 函数名(形参1,形参2.....){ //在声明函数的括号里面是 形参 (形式上的参数)
}
函数名 (实参1,实参2...){ //在函数调用的括号里是实参 (实际的参数)
}
实参和形参
函数的参数可以有,也可以没有 个数不限
在声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用函数时,同样也需要传递相应的参数,这些参数被称为实参。
参数 | 说明 |
---|---|
形参 | 形式上的参数,函数定义的时候 传递的参数 当前并不知道是什么 |
实参 | 实际上的参数 函数调用的时候传递的参数 实参实传递给形参的 |
函数的返回值 return
return 需要返回的结果
语法格式
function 函数名(){
return 需要返回的结果 ;
}
函数名 ();
把最终的结果需要返回给函数的调用者 函数名()
return 后面的代码无法执行
函数都是有返回值的
- 如果有return 则返回 return 后面的值
- 如果没有returm 则返回 undefined
小结
- break:结束当前的循环体(如 for 、while)
- continue: 跳出本次循环,继续执行下次循环(如 for 、 while)
- retum: 不仅可以退出循环,还还能够返回return语句中的值,同时还可以结束当前的函数体内的代码
arguments 的使用 (内置对象)
当我们不确定有多少该个参数的时候,可以用
argumemts
来获取,在js中,atguments
实际上他是当前函数的一个内置函数。所有函数都内置了一个arguments对象
,arguments对象中储存了传递的所有实参。
arguments 展示形式是一个伪数组,因此可以进行遍历,伪数组具有以下特点:
- 具有length属性
- 按索引方式储存数据
不具有数组的push 、pop等方法
只有函数才有 arguments对象
函数是可以相互调用
函数的声明
作用域
就是代码名字(变量)在某个范围内起作用和效果 目的是为了调高程序的可靠性 更重要的是减少命名冲突
变量的作用域
1、全局:全局作用域下的变量 在全局下都可以使用
注意:如果在函数内部 没有声明(
var
)直接赋值的变量也属于全局变量 赋值变量也叫全局变量
2、局部: 在局部作用域下的变量 后者在函数里的变量就是 局部变量
注意: 函数的形参也可以看作是局部变量
区别
作用域链–就近原则
输出:20
预解析
js引擎会把js 里面所有的
var变量
还有function函数
提升到当前作用域的最前面
变量提升就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
函数提升 就是把 所有的函数声明提升到当前作用域的最前面 不调用函数
对象 - 万物皆对象
对象是由属性和方法组成的。
- 属性:事物的特征,在对象中用属性来表示(常用名词)
- 方法:事物的行为,在对象中用方法来表示(常用动词)
创建对象
使用对象
变量,属性,函数,方法的 区别
- 变量:单独声明赋值,单独存在
- 属性:对象里面的变量称为属性,不需要声明,用来描述该对象的特征
- 函数: 单独存在的,通过"函数名()"的方式可以调用
- 方法:对象里面的函数值称为方法,方法不需要声明,使用"对象.方法名()"的方式就可以调用,方法用来描述该对象的行为和功能。
用 new object 创建对象
构造函数
构造函数是一种特殊的函数,主要用来
初始化对象
。即为对象成员变量赋初始值,它总于new运算符一起使用
,我们可以把对象中的一些公共的属性和方法抽取出来,然后封装到这个函数里面
语法格式
function 构造函数名(){
this.属性= 值;
this.方法 = function(){}
}
new 构造函数名();
案例
构造函数与对象
- 构造函数,如Stars(),抽象了对象的公共部分,封装到了函数里面,它泛指某一大类(class)
- 创建对象:如 new Stars() ,特指某一个,通过new 关键创建对象的过程我们也称为对象实例化
new 关键字
1、new 构造函数可以在内存中创建一个空对象
2、this 就会指向刚才创建的空对象
3、执行构造函数里面的代码 给这个空对象添加属性和方法
4、返回这个对象(所以构造函数里不需要return)
遍历对象属性 - for…in…
for…in 语句 用于对数组或者对象的属性进行循环操作
for ( 变量 in 对象){
}
小结
- 对象可以让代码结构跟清晰
- 对象复杂数据类型object
- 本质:对象就是一组无序的相关属性的方法的集合
- 构造函数 泛指某一大类。比如苹果,不管是红色苹果还是绿色苹果,都统称为苹果
- 对象实例特指一个事物,比如这个苹果,正在给你们写着笔记的作者等
- for…in 语句用于对对象的属性进行循环操作。
内置对象 - DOM
js有3种对象:
自定义对象-ECMAScript
内置对象-DOM
浏览器对象-BOM
MDN
https://developer.mozilla.org/zh-CN/
Math 数学对象
Math 数学对象官方说明
与其他全局对象不同的是,Math 不是一个构造器。Math 的所有属性与方法都是静态的。引用圆周率的写法是 Math.PI,调用正余弦函数的写法是 Math.sin(x),x 是要传入的参数。Math 的常量是使用 JavaScript 中的全精度浮点数来定义的。
Math.PI //圆周率
Math.floor() //向下取整
Math.cell() //向上取整
Math.round() //四舍五入 就近取整 注意 -3.5 结果是-3
Math.abs() //绝对值
Math.max() //求最大和最小值
Math.round() 四舍五入 其他数字都是四舍五入 但是 0.5 特殊 他往大取值
随机数 random()
返回一个随机数 0=<x<1
得到两个数之间的随机整合 并且 包含这两个整数↓↓↓↓
Math.floor(math.random()*(max-min+1))+min;
日期对象 Data()
var date =new Date(); 必写
只能通过 Data构造函数来实例化日期对象
使用data 如果没有参数 返回当前系统的当前时间
1.获取当前时间必须实例化
var now = new Data();
console.log(now);
2.Data() 构造函数的参数
如果括号里面有时间,就返回参数里面的时间。例如日期格式字符串为 ‘2020-6-19’ ,可以写成new Date(‘2020-6-19’)
获取日期指定的部分
有时候我们需要获取日期指定的部分,所以我们要手动的得到这种格式。
方法名 | 说明 | 代码 |
---|---|---|
getFullYear() | 获取当年 | dObj.getFullYear() |
getMonth() | 获取当月(0-11) | dObj.getMonth() |
getDate() | 获取当天日期 | dObj.getDate() |
getDay() | 获取星期几(每周0 到周6) | dobj.getDay() |
getHours() | 获取当前小时 | dobj.getHours() |
getMinutes() | 获取当前分钟 | dobj.getMinutes() |
getSeconds() | 获取当前秒数 | dobj.getSeconds() |
案例
年月日
// 最后一行
console.log('今天是'+year+'年'+month+'月'+dates+'日'+arr[day])
时分秒
获取毫秒
倒计时案例
代码部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width= , initial-scale=1.0">
<title>Document</title>
</head>
<script>
// d = parseInt(总秒数/60/60/24); 计算天数
// h=parseInt(总秒数/60/60%24); 计算小时
// m=parseInt(总秒数/60%60); 计算分数
// s=parseInt(总秒数%60); 计算当前秒数
function conutDown(time) {
var nowTime = +new Date(); //返回当前时间的总的毫秒数
var inputTime = +new Date(time); //返回用户输入时间的总毫秒数
var times = (inputTime - nowTime) / 1000; //剩余时间总的秒数
//天
var d = parseInt(times / 60 / 60 / 24);
d = d < 10 ? '0' + d : d;
//时
var h = parseInt(times / 60 / 60 % 24);
h = h < 10 ? '0' + h : h;
//分
var m = parseInt(times / 60 % 60);
m = m < 10 ? '0' + m : m;
//秒
var s = parseInt(times % 60);
s = s < 10 ? '0' + s : s;
// 判断时间是否小于10 否则加+0
// d = d < 10 ? '0' + d : d;
// h = h < 10 ? '0' + h : h;
// m = m < 10 ? '0' + m : m;
// s = s < 10 ? '0' + s : s;
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(conutDown('2021-1-1 00:00:00'));
var data = new Date(); //现在时间
console.log(data);
</script>
<body>
</body>
</html>
判断数组对象
1、instanceof
运算符 可以用来检测是否为数组
语法 :
数组名 instanceof Array
2、Array.isArray(参数)
添加删除数组元素方法
添加方法 - push unshift
-
push 是可以给数组
追加新的元素
(加在数组最后)
push() 参数直接写 数组元素就可以了
push 完毕后,返回的结果是 新数组的长度
原数组也会发生变化 -
unshift 在
数组开头添加
添加一个或者多个数组元素
删除方法- pop shift
- pop() 可以删除数组的最后一位元素 一次只能删除一个
pop()没有参数
pop() 完毕之后,返回的值是删除的元素
原数组也会发生变化 - shift()删除数组的第一个元素 返回删除的值 原数组也会发生变化
小结
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 末尾添加一个或多个元素,注意修改原数组长度 | 并返回新的长度 |
pop() | 删除数组最后一个元素,把数组长度减1,无参数,修改原数组 | 返回它删除的元素的值 |
unshift(参数1…) | 向数组的开头添加一个或更多元素,注意修改原数组 | 并返回新的长度 |
shift() | 删除数组的一个元素,数组长度减1 无参数 ,修改原数组 | 并返回第一个元素的值 |
数组排序
1、翻转数组
数组名.reverse( )
2、排序 (冒泡排序)
数组名.sort( );
函数的返回值只是判断正负,用来控制两个元素是否互换位置
数组索引 查找
- indexOf(数组元素) 返回该数组元素的索引号 只返回一个满足条件的索引号 如果没有找到该元素返回 -1 从数值前面开始查找
- lastIndexOf(数组元素) 从数值后面开始查找
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号 如果不存在,则返回-1 |
lastIndexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号 如果不存在,则返回-1 |
数组转为字符串
- 数组名.toString() 把数组转换成字符串
- 数组名.join(分隔符) 可以在数组元素之间添加符号
方法名 | 说明 | 返回值 |
---|---|---|
.toString() | 把数组转换成字符串,逗号分隔每一项 | 返回一个字符串 |
.join(‘分隔符’) | 方法用于把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
重要
方法名 | 说明 | 返回值 |
---|---|---|
concat() | 连接两个或多个数组 不影响原数组 | 返回一个新的数组 |
slice() | 数组截取 slice(begin,end) | 返回被截取项目的新数组 |
splice() | 数组删除 splice(第几个开始,要删除个数) | 返回被删除项目的新数组 注意,这个会影响原数组 |
slice() 和 splice() 目的基本相同 ,建议重点看下 splice()
字符串对象
1、基本包装类型
2、字符串的不可变性
根据字符返回位置
字符串所有的方法,都不会改变字符串本身(字符串是不可变的),操作完成返回一个新的字符串
根据位置返回字符
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符 (index 字符串的索引号) | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCII码 (index 索引号) | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 | HTML5, IE8+ 支持 和 charAt()等效 |
字符串操作方法(重点)
1、concat(‘字符串1’,‘字符串2’,‘字符串3’,…) - 字符串拼接
concat() 方法用于连接两个或多个数组。
var srt='abdy';
console.log(str.soncat('red'))
//输出为 abdyred
2、substr(‘截取的起始位置’,‘截取几个字符’);
var str1='改革春风吹满地';
console.log(str1.substr(2,2)); //第一个2是索引号的2 从第几个开始 第二个2 是取几个字符
输出为 春风
3、替换字符串 replace(‘被替换的字符’,‘替换为的字符’) 只会替换第一个字符
var str ='andyandy';
console.log(str.replace('a' , 'b'));
//结果为 bndyandy
结果就是:abc*efoxyozzopp
4、字符串转换为数组 split(‘分隔符’) 前面join 把数组转换成字符串
简单数据类型与复杂数据类型
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型
- 值类型: 简单数据类型/基本数据类型,在储存时变量中储存的是值本身,因此叫做值类型
string、number、boolean、undefined、null
引用类型:复杂数据类型,在存储是变量中储存的仅仅是地址(引用),因此叫做引用数据类型
- 通过
new 关键字
创建的对象(系统对象,自定义对象),如Object、Array 、Date等
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包括 整形值和浮点型值,如21/0.21 | 0 |
Boolean | 布尔值类型,如true,false,等价于1和0 | false |
String | 字符串类型,如 “张三” js里,字符串都带引号 | " " |
Undefined | var a; 声明了变量a 但是没有给值,此时a=undefined | undefined |
Null | var a=null;声明了变量a为空值 | null |
复杂数据类型 | 说明 | 默认值 |
---|---|---|
Object | 对象 | let a = {} |
Array | 数组 | let b = [] |
Date | 日期 | let D = new Date() |