JS入门到精通

本文详细介绍了JavaScript的基础语法,包括数据类型、运算符、流程控制语句、对象、函数、数组、字符串、正则表达式以及DOM操作。特别讨论了如何检查手机号码和邮箱账号的正则表达式,并探讨了事件、DOM节点操作和事件冒泡。内容覆盖了从变量、运算到高级特性的全面解析。
摘要由CSDN通过智能技术生成

2、检查是否为一个手机号码

手机号码的规则

  • 以1开头
  • 第二个是3到9任意数字
  • 三位以后是任意9个数字

目录

 1、html中的js

书写

js的基本语法

1、注释

 2、基础语法

 字面量和变量

标识符

数据类型

字符串(String)

数值(Number)

布尔值  ( Boolen)

空值  (Null)

未定义  (Undefined)

对象  (Object)

 强制的类型转化

 将其他数据类型转化为String

 将其他数据类型转化为Number

 其他进制的数字

 将其他数据类型转化为Boolen

运算

算术运算符

一元运算符

 自增和自减

逻辑运算符

 ! 非

&& 与

|| 或

非布尔值的与或运算

&&

||

赋值运算符

关系运算符

相等运算符

使用== 来做相等运算(会做自动的类型转换)

 !=(会自动类型转换)

 ===  (不会自动类型转换)

!== 不全等  (不会自动类型转换)

 条件运算符

 运算符的优先级

流程控制语句

if语句

条件分支语句,也叫switch

循环语句

while循环

do ...while循环

for循环

break和continue

break关键字可以退出switch或循环语句

对象

对象的分类:

创建对象

属性名、属性值

基本数据类型和引用数据类型

对象字面量

 方法

枚举对象中的属性

 使用工厂方法创建对象

构造函数的执行过程:

 原型对象

函数

 创建函数的方法

 使用构造函数创建函数

当调用函数时,函数中封装的代码会按顺序执行。

使用函数表达式来创建函数  (匿名函数)

 立即执行函数

函数的参数

函数的返回值

 作用域

1、全局作用域

2、函数作用域

this

数组(数组其实就是一个对象)

 数组的遍历

数组中的方法

1、数组中的slice和splice

concat

join  

reverse

sort 

函数的方法

call和apply

argument

 Math

 包装类

字符串的方法

​ 正则表达式

正则表达式语法

方括号

元字符

量词

 对象属性

 对象方法

 字符串和正则相关方法

检查是否为一个手机号码

 检查是否为邮箱账号

DOM(数组对象)

节点

 事件

文档的加载

 图片切换的联系

获取元素节点的子节点

 获取元素父节点和兄弟节点

DOM查询的剩余方法

 DOM的增删改

HTML

添加删除记录

操作内联样式

事件

事件对象 

div跟随鼠标的移动

事件冒泡

冒泡的应用-事件委派

事件的绑定

addEventListener()

attachEvent()


 1、html中的js

书写

 1、在页面弹出警告框

alert("内容")

 2、直接在页面中输出

document.write(”内容“)

 3、在控制台输出

console.log("内容")

 js的书写位置

1、写在标签中

点击button后才执行

<!-- 可以将js代码编写到标签中的onclick属性中,当我们点击按钮时,js代码才会执行
		虽然可以写在标签中,都是他们属于结构与行为耦合,不方便维护,不推荐。
		-->
		<botton onclick="alert('点击弹出警告窗口');">点击</botton>
		<!-- 可以将js代码卸载超链接的herf属性中,这样点击超链接时,会执行js代码 -->
   <a href="javascript:alert('点击弹出警告窗口');">点击2</a>

2、写到ds标签中

<script type="text/javascript">
			alert('欢迎来到js滴世界哦')
		</script>

3、外部js文件

外部文件可以在不同页面中同时引用,也可以利用到浏览器的缓存机制。

这是我们推荐使用的方式

script标签一旦引入外部文件了,就不能再编写代码了,即使编写了浏览器也会忽略。如果需要则可以再创建一个新的script标签

<!-- 写到外部文件 -->
		<script type="text/javascript" src="dist/js/app.5f4a6536.js"></script>、

上面地址是js文件的地址

js的基本语法

1、注释

	 <script type="text/javascript">
	 	// js的注释(ctrl+/) 单行注释
		/*
		多行注释
		*/
	 </script>

 2、基础语法

  • js中严格区分大小写
  • js中每一条语句以分号(;)结尾

          如果不写分号,浏览器会自动添加,但是会消耗一些系统资源,而且有些时候,浏览器会加错分号,所以在开发中必须写分号。

  • js中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化

 字面量和变量

1、字面量

字面量都是可以直接使用的,但是我们一般不直接使用字面量

2、变量

变量可以用来保存字面量,而且变量的值是任意改变的。

变量更方便我们使用,所以在开发中都是通过变量去保存严格字面量,而不会直接使用字面量,

可以通过变量对字面量进行描述;

 声明变量  var、let、const

变量赋值:a=23;  ,声明和赋值可以同时进行;

标识符

 在js中所有的由我们自主命名的都可以称为标识符;

例如:函数名、变量名、属性名都属于标识符

命名标识符需要符合的规则:

  1. 标识符中可以含有字母、数字、_、$
  2. 标识符不能以数字开头
  3. 不能是ES中的关键字或保留字
  4. 标识符一般采用驼峰命名法  (首字母小写,每个单词的开头字母大写,其余字母小写)

数据类型

数据类型指的就是字面量的类型

String、Number、Boolen、Null、Undefined属于基本数据类型,而Object属于引用数据类型。

字符串(String)

在字符串中使用字符串,需要引号引起来,使用单引号和双引号都可以,但是不要混着用;引号不能嵌套,双引号不能放双引号,单引号不能放单引号

var ste=‘hello’; 

 str='我说:"今天天气不错!" ';

 \t:标识换行   ;    \':表示 ’  ;\":表示:“;   \n:表示换行;\\:表示\;  \\\\:表示\\;

//输出字符串
	 console.log('abc')
	 // 输出变量
	 console.log(abc)

数值(Number)

 在js中所有的数值都是Number类型,包括整数和浮点数(小数)

/*
	   可以使用严格运算符typeof来检查一个变量的类型
		 语法:typeof  变量
		 检查数值时,会返回一个number
		 检查字符串时,会发返回一个String
	 */
	console.log(abc)

 js中表示数字的最大值

Number.Max_VALUE

 注:如果一个数字使用Number超过了最大值,则会返回一个Infinity表示一个正无穷,

使用typeof检查Infinity也会返回一个Number,使用typeof检查NaN也会返回一个Number

	/*
	在js中的整数运算可以确保其精确值
	如果使用js进行浮点元素,可能得到一个不精确的结果,所以千万不要使用js进行对精确度要求比较高的运算
	*/
 var a=0.1+0.2;//结果不等于0.3,等于0.30000000000000004

布尔值  ( Boolen)

 布尔值只有两个,true和false,主要用来做逻辑判断

使用typeof检查布尔值,会返回一个Boolen

空值  (Null)

 Null类型的值只有一个,即为null

null这个值专门用来表示一个空的对象

使用typrof来检查null,则会返回object

未定义  (Undefined)

undefined的类型只有一个,就undefined

当声明一个变量,但是并不给变量赋值,它的值就是undefined

 let b;

console.log(b)  //输出undefine

 使用typrof来检查undefined,则会返回undefined

对象  (Object)

 强制的类型转化

 指的是将一个数据类型强制转化为其他类型。

类型转化主要指的是将其他数据类型转换为String 、Number、Boolean

 将其他数据类型转化为String

方法一:调用被转换数据类型的toString()方法

不会转化

(1)

let a=123;
 a.toString();
 console.log(typeof a);  //a的类型还是Number

 (2)null转字符串

let a=null;
a=a.toString;
console.log(typeof a)//报错

 (3)undefine转字符串

let a=undefined;
a=a.toString;
console.log(typeof a)//报错

 会转化

数字转字符串


 let a=123;
let a=a.toString();
 console.log(typeof a);  //输出String

 布尔值转字符串

a=true;
a=a.toString

 方法二:调用String函数,并将被转换的数据作为参数传递给函数

 可以将null、undefined转化为字符串

语法

 let a=123;
 a=String(a);
consoloe.log(typeof a);

 let a=null;
 a=String(a);
consoloe.log(typeof a);//String
console.log(a)//输出"null"

 let a=undefined;
 a=String(a);
consoloe.log(typeof a);//String
console.log(a)//输出"undefined"

 将其他数据类型转化为Number

方法一:调用Number()函数来将a转化为Number类型

1、字符串转数字,如果是纯数字字符串,则直接转化为数字

let a="123"
a=Number(a);

 2、如果字符串中有非数字的内容,则转换为NaN

 let a="1abc"
a=Number(a);
console.log(typeof a)//number
console.log(a)//NaN

 3、字符串是一个空字符串或者是一个全是空格的字符,则转化为0;

 let a=“"
a=Number(a);
console.log(typeof a)//number
console.log(a)//0

 4、布尔值

true转化为1

false转化为0

5、null转化为数字

转成为0

6、undefined

转数字为NaN

 方法二:这种方式用来对付字符串

parseInt()  转化为整数   parseInt()转化为浮点数

let a="123px"
a=a.parseInt(a)
console.log(typeof a)//Number
console.log(a)//123
let a="b123px"
a=a.parseInt(a)
console.log(typeof a)//Number
console.log(a)//NaN

 如果对非String使用parseInt()或parseFloat

它会先将其转化为String

 其他进制的数字

在js中,如果需要表示16进制的数字,则需要以 0x开头

let a=0x10;
console.log(a)//16

 如果需要表示8进制的数字,则需要以0开头

像070有时会当成八进制,有时也会被当成十进制

let a=070;
console.log(a)//56

 如果需要表示2进制,则需要0b开头,但是不是所有的浏览器都支持

 将其他数据类型转化为Boolen

方法一:布尔函数Boolen

数字

let a=123;
a=Boolen()//true;
a=-123; 
a=Boolen() ; //true;
a=0;  
a=Boolen();  //false;
a=Infinity;/
a=Boolen()  /true;
a=Boolen()
a=NaN; //false

 若是字符串,只要不为空都是true,若为空字符串,则返回false

若 a=null;

a=a.Boolen()  //结果为false

 若  a=undefined;

 a=a.Boolen()//结果为false;

 对象也会转换为true

方法二:可以为任意数据类型取两次取反,来将其转化为布尔值

运算

算术运算符

运算符也叫操作符

通过运算符可以对一个或多个值进行运算,并获取运算结果

1、typeof就是运算符,可以用来获取一个值的类型,它会将该值的类型以字符串的形式返回。

2、数学运算符号

+  - * / %

加法

对非Number类型的值进行运算时,会将这些值转化为Number然后再运算,

任何值和NaN相加都得NaN,

字符串相加先转化为字符串,再来拼接,结果也还为字符串

a=2+NaN  //结果也为NaN

a="123"+"234"//  结果为123234

a=1+2+'3'  //结果为33

a='1'+2+3  //结果为123;

 减法  结果都为数字

乘法

a =2*"8" //16

a=2*undefined  //结果为NaN

 任何值做 - * /运算时,都会自动转化为Number,可以通过一个值 -0 *1、/1来将其转化为Number

一元运算符

只需要一个操作符

+正号:正号 不会对数字产生影响

-负号:负号可对数字进行负号的取反

对于非Number值,会先转化为数字,然后再进行运算,可以对一个其他的数据类型使用+,将其转化为Number

 var a= 1++"2"+3   //结果为 

 自增和自减

自增++

自增可以使变量在自身的基础上增加1

对于一个变量自增以后,原变量的值就会立即自增1;

自增分为两种:a++;++a;,无论时a++还是++a,都会立即使原变量的值自增1

不同的时a++、和++a的值不同

a++的值等于原变量的值

 let a=1;

console.log(a++)   //1

console.log("a="+a)   //a=2

let a=1;

console.log(++a)   //2

console.log("a="+a)   //a=2

 let d=20;

let a=d++ + ++d +d;  //64

 自减

自减可以使变量在自身的基础上增加1

对于一个变量自减以后,原变量的值就会立即自减1;

自减分为两种:a--;--a;,无论时a--还是--a,都会立即使原变量的值自减1

不同的时a--、和--a的值不同 

逻辑运算符

 !

,对值进行非运算,就是对布尔值进行一个取反,先变成布尔值,然后再取反

如果对一个值进行两次取反,那么它不会变化

可以为任意数据类型取两次取反,来将其转化为布尔值

原理和Boolen函数一样

&& 与

  &&可以对符号两侧进行与运算并返回结果

运算规则:

如果两端都为true,结构都为true,只要有一个flase则返回false,只有两个值都为true,才返回true;

|| 或

|| 可以对运算符号两侧的值进行或运算并返回结果

运算规则:

只要有一个为true,就返回true;若都为false,则返回false

非布尔值的与或运算

&&  || 非布尔值情况:

对于非布尔值进行与或运算时,会向将其转化为布尔值

&&

true && true (与)

如果两个值都为true,则返回后面的值

var reslult =2&&1;  //结果为1

false&&true (true&&false)

返回前面的false

a=0&&2;  //结果为0

a=2&&0;  //结果也为0

false&&false 

结果返回靠前的false

a=NaN&&0; //NaN

a=0&&NaN; //结果为0

||

如果第一个值为true,直接返回第一个true

如果第一个值为false,则直接返回第二个数

赋值运算符

=  可以将符号右侧的值赋给符号左侧的值

+=   a=a+5 等价于 a+=5;

-=  a=a-5  等价于 a-=5;

/=;*=;%=  这些与前面的例子都一样

关系运算符

通过关系运算符今天比较两个值之间的大小关系

如果关系成立,它就会返回true,成立返回false

 对于非数值的情况

  • 对于非数值进行比较时,会将其转换为数字然后在比较
  • 如果符号两侧的值都是字符串时,不会将其转化为数字进行比较而会分别比较字符串中字符的Unicode编码。

任何值和NaN做任何比较都是false

算术运算符和关系运算符都是先转换为数值再处理,逻辑运算符先转换为布尔值再处理。

console.log("11"<"5");  true
console.log("12">"21") //true
console.log("a"<"b")  //true
//比较字符串编码时是一位一位进行比较的,如果两位一样,则比较下一位,所以借用它来进行英文排序
console.log("abc">"b")  //true
console.log("abc"<"bcd"); //true
//比较中文时没有意义
console.log("戒" >"我")  //true
console.log("11"<"5")  //true
//如果比较的两个字符串型的数字,可能会得到不可预期的结果,所以注意在比较两个字符串的数字时,一定要转型
console.log("11123123123123123123"<+"5"); //true

相等运算符

相等运算符用来比较两个值是否相等

     如果相等就会返回true,否则返回false

使用== 来做相等运算(会做自动的类型转换

     当使用==来比较两个值时,如果值得类型不同,则会自动进行类型转换,将其转换为相同的类型,然后再比较

let a=10;

console.log(a==5)  //false 

 console.log(true =="1")  //true

console.log(null == 0)  //false

 undefined 衍生自null所以这两个值做相等判断时,会返回true

console.log(undefined == null) //true

 NaN不和任何值相等,包括它本身,可以通过isNaN()函数来判断一个值是否是NaN

 !=(会自动类型转换

不相等则返回true,不相等则返回false

 ===  (不会自动类型转换

用来判断两个值是否全等,与“==”类似

!== 不全等  (不会自动类型转换

用来判断两个值是否会全等

 条件运算符

条件运算符也叫三元运算符

语法:

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

 执行流程:

    条件运算符再执行时,首先对条件式进行求值

         如果该值为true,则执行语句1,并返回执行操作

        如果该值为false,则执行语句2,并返回执行操作

  let max =a>b ?(a>c?a:c) :(b>c?b:c);   //一般不建议这么些(比较三个数的最大值) 

 运算符的优先级

使用,可以同时声明多个变量

let a,b,c;9

在js中有一个符号优先的表,在表中越靠上,优先级越高,优先级越高越先计算,如果同级则从左往右,如果有优先级不清楚可以使用括号来改变

流程控制语句

js程序是从上到下,一行一行执行的,通过流程控制语句可以控制程序执行流程,使程序可以根据一定的条件来选择执行

语句的分类:

1、条件判断语句

2、条件分支语句

3、循环语句

if语句

语法一:

if(条件表达式)

  语句

if语句执行时,会先对条件表达时进行求值判断,如果条件表达式的值为true,则执行if后的语句。如果为false,则不会执行if后的语句

语法二

if(条件表达式){
        语句...
}else{   语句...}

语法三:

if(条件表达式){
        语句...
}if else{语句....}
if else {语句....}
else{   语句...}

如果值为true,则执行这个语句,从上到下

条件分支语句,也叫switch

语法:

  switch(条件表达式){

    case  表达式:

          语句...

      break;

case  表达式:

          语句...;

      break;

case  表达式:

          语句...;

      break;

default:

  语句...

  break;

执行流程:

switch ...case...语句

在执行时会溢出将case后的表达式的值和switch后的条件表达式的只矩形全等比较

如果比较结果为true,则当前case处开始执行代码;会继续比较,若添加break则会终止;如果比较结果为false,则继续向下比较;如果所有的比较都为false,则只执行default后的语句。

//使用break会退出语句

switch语句和if语句的功能实际上有重复的·,使用switch可以实现if的功能,同样使用if也可以实现switch的功能

循环语句

while循环

while(条件表达式){

     语句....

}

while 语句在执行时,先对条件表达式进行求值判断,如果值为true,则执行循环体,循环体执行完毕以后,继续对表达式进行判断,以此类推;

若为false,则终止循环

while(true){
    alert(n++)
}

像这种表达式写死为true的循环,叫做思想和,该循环不会停止,除非浏览器关闭,死循环在开发中慎用,可以使用break来终止循环。

创建循环,往往需要三个步骤

//初始化一个变量

let i=0;
//在循环中设置一个条件表示式
while(i<10){
//定义一个更新表达式,每次更新初始化变量
i++;
alert("1");
}

do ...while循环

语法

do{

     语句....

}while(条件表达式)

执行do...while语句执行时,会先执行循环体,循环执行完毕以后,在对while后的条件表示式进行判断,如果结果为true则继续执行循环体,如果结果为false则终止循环;

do...while语句与while语句功能类似,前者执行后判断,后者先判断后执行;前者保证循环体至少循环一次,后者不能。

for循环

在for循环中,为我们专门提供了位置来放三个表达式

1、初始化表达式;

2、条件表达式

3、更新表达式

for循环的语法:

for( 初始化表达式;条件表达式;更新标识式){

   语句...

}

for循环的执行流程:

  (1)执行初始化表达式,初始化变量

  (2)执行条件表达式,判断是否执行循环

      如果为true,则执行循环;如果为false,终止循环

(3)执行更新表达式;更新表达式执行完毕继续重复(2)

for循环中的三个部分都可以省略,也可以写在外部

  •    如果for循环中不写任何的表达式,只写两个;
  • 此时循环时一个死循环会一直循环下去,慎用   for(;;){alert(‘hello’);}

let i=0;

for(;i<10;){

alert(i++)

}

break和continue

break关键字可以退出switch或循环语句

  • 不能在if语句中使用break和continue
  • break关键字,会立即终止离他最近的那个循环语句
  • 可以为循环语句创建一个label,来标识当前的循环

         label:循环语句

        使用break语句是,可以在break后跟着一个label,这样break将会结束指定的循环,而不是最近的

break outer  

for(let i=0;i<5;i++){
			console.log("@外层循环"+i)
			for(let j=0;j<5;j++){
				break  outer;
				console.log("内层循环"+j);
		}
//@外层循环0

continue关键字可以用来跳过当前循环,立即结束当前循环,只跳过一次,跳过当前循环,同样continue只会对离它最近的循环起作用

对象

对象属于一种复合的数据类型,在对象中可以保存多个不同的数据类型的属性

对象的分类:

1、内建对象

   由ES标准定义的对象,在任何的ES的实现中都可以使用

比如:Math String Number Boolean Function object...

2、宿主对象

  由js的运行环境提供的对象,目前来讲主要指由浏览器提供的对象

比如  BOM DOM

3、自定义对象

由开发人员自己创建的对象

创建对象

使用new关键字调用的函数,是构造函数constructor,构造函数是专门用来创建对象的函数

	let obj =new object();

在对象中保存的值称为属性,

向对象添加属性

语法:对象.属性名  = 属性值;

对象的属性名不强制要求遵守标识符的规范,但是使用时尽量按照标识符的规范去做

如果要使用特殊属性名,不能采用.的方式来操作,需要用另一种方式:

语法:对象["属性名"] = 属性值

//向obj添加name属性
obj.name="孙悟空"
//向obj添加age属性
		obj.age=18;
//向obj添加gender属性
		obj.gender='男'

读取对象中的属性

语法:对象.属性名

console.log(obj.name)

如果读取对象中没有的属性,不会报错而是会返回undefined

修改对象的属性值

语法:对象.属性名 =新值

删除对象的属性

语法:delete  对象.属性名

属性名、属性值

如果要是使用特殊的属性名,不能采用.的方式来操作,需要用另一种方式:

语法:对象["属性名"]=属性值,读取也用这种方式

obj['123']=789;
console.log(obj['123']

使用[]这种形式去操作属性,更加灵活,在[]中可以直接传递一个变量,这样变量值时多少就会读取那个属性

obj['123'] =789;
let n="123" ;
console.log(obj[n]);//与console.log(obj[123']相等

基本数据类型和引用数据类型

基本数据类型:

String、Number、null、undefined、Boolean

引用数据类型:

Object

js中的变量都是保存到栈内存中的,

基本数据类型的值直接在栈内存中储存,值与值之间是独立存在的,修改一个变量不会影响到其他的变量。

对象是保存到堆内存中的,每创建一个新的对象,就会在内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个比变量修改属性时,另一个也会受到影响。

	let obj =new object();
		obj.name="孙悟空"
		let obj2.name&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值