JavaScript (001)
一、JavaScript简介1.JavaScript是什么是一种运行在客户端浏览器的编程语言实现人机交互的效果2.作用网页特效监听用户的一些行为让网页做出对应的反馈表单验证针对表单数据的合法行进行判断数据交互获取后台的数据渲染到前端服务端编程node.js3.JavaScript组成ECMAScript规定了js基础语法核心知识Web APIsDOM 操作文档BOM 操作浏览器4.JavaScript书写位置1内部JavaScript直接现在html文件里用script标签包住2外部JavaScript写在.js文件中通过script标签引入到html页面中3内联JavaScript写在标签内部5.注释1单行注释//快捷键ctrl/2块注释/* */快捷键shiftalta6.结束符分号;可以加可以不加最好统一加或不加7.输入和输出语法1输出语法1向body内输出内容如果输出内容被标签包裹会被解析成网页元素document.write(要输出的内容)2页面弹出警告对话框alert(要输出的内容)3控制台输出语法程序员调试使用console.log(控制台打印的内容)2输入语法1提示文字对话框prompt(对话框提示内容)8.执行顺序按照HTML文档流执行JS代码alert()和prompt()会跳过页面渲染先被执行9.字面量在计算机中描述的事或物二、变量1、定义变量是计算机用来存储数据的“容器”它可以让计算机变得有记忆2、作用用来存放数据3.变量的基本使用1声明变量let变量名2变量赋值age18*声明的同时直接赋值变量的初始化letage183更新变量letage18age194声明多个变量letage18,uname张三4.变量的命名规则与规范1规则不能用关键字只能用下划线、字母、数字、$符组成且不能以数字开头字母严格区分大小写2规范起名要有意义遵守小驼峰命名法第一个单词首字母小写后面每个单词首字母大写5.let和var的区别在较旧的JS中使用关键字var来声明变量现在开发中一般不使用它let解决了var的一些问题var声明可以先使用再声明不合理var声明过的变量可以重复声明不合理变量提升、全局变量、没有块级作用域等等6.数组可以将一组数据存储在单个变量名下1声明语法let数组名[数据1,数据2,...,数据n]2术语元素数组中保存的每个数据都叫数组元素下标数组中数据的编号长度数组中数据的个数通过数组的length属性获得3取值语法数组名[下标]4更改数组元素利用数组名[下标]进行重新赋值5添加数组元素1数组名.push()将一个或多个元素添加到数组的末尾并返回该数组的新长度数组名.push(元素1,元素2,...,元素n)2数组名.unshift()将一个或多个元素添加到数组的开头并返回该数组的长度数组名.unshift(元素1,元素2,...,元素n)6删除数组中的数据1数组名.pop()从数组中删除最后一个元素并且返回该元素的值数组名.pop()2数组名.shift从数组中删除第一个元素并且返回该元素的值数组名.shift()3数组名.splice()删除指定元素数组名.splice(起始位置删除几个元素)起始位置从0开始如果省略删除几个元素默认从指定位置删除到最后二、常量1.语法const常量名数据三、数据类型1.基本数据类型1number 数字型1定义数学中学习到的数字可以是整数、小数、正数、负数2常用搭档算数运算符求和-求差*求积/求商%取模取余数3特殊结果NaN代表计算错误是一个不确定的或者一个未定义的数学操作所得到的结果任何对NaN的操作都会返回NaN2string 字符串型1定义通过单引号、双引号、反引号包裹的数据叫字符串单引号和双引号没有本质上的区别推荐使用单引号2注意事项单双引号可以进行嵌套但是不能自己嵌套自己3字符串拼接使用可以将字符串进行拼接模板字符串外面用反引号包裹里面的变量用${}包裹document.write(我今年${age}岁了)3boolean 布尔型1定义它有两个固定的值true和false表示肯定的数据用true真表示否定的数据用false假4undefined 未定义型1定义只有一个值undefined当只声明变量不赋值的情况下变量的默认值为undefined一般很少直接为某个变量赋值为undefined5null 空类型1定义把null作为尚未创建的对象2.引用数据类型1object 对象四、检测数据类型1.通过关键字检测数据类型typeof运算符可以返回被检测的数据类型它支持两种语法形式作为运算符typeof 数据函数形式typeof(数据)五、类型转换原因对话框、单选框、复选框传入的数据自动认定为字符串型1.隐式转换某些运算符被执行时系统内部自动将数据类型进行转换这种转换称为隐式转换1规则号两边只要有一个是字符串都会把另一个转换成字符串-、*、/等会吧数据转换为数字类型号作为正号解析可以转换成数字型e.g. ‘123’ 为数字型任何数据和字符串相加的结果都是字符串2显示转换1转成数字型Number(数据)转换成数字类型如果字符串内容里有非数字转换失败时结果为NaNNaN也是number类型的数据代表非数字parseInt(数据)只保留整数parseFloat(数据)可以保留小数六、运算符1.赋值运算符1定义对变量进行赋值的运算符2类型将等号右边的值赋予给左边要求左边必须是一个容器-*/%2.一元运算符1定义只需要一个表达式就可以运算的运算符叫做一元运算符2类型自增前置自增前“”先自加后使用后置自增后“”先使用后自加自减前置自减前“–”先自减后使用后置自减后“–”先使用后自减3.比较运算符1定义比较两个数据大小、是否相等2类型大于小于大于等于小于等于值相等值和类型都相等!不全等3注意NaN不等于任何值包括它本身尽量不要比较小数小数由精度问题4.逻辑运算符1类型与一假则假||或一真则真!非取反2逻辑中断短路只存在于 || 中当前面的判断条件已经足够判断后面的条件将不会被执行5.优先级优先级运算符顺序1小括号2一元运算符--!3算术运算符先*/%后-4关系运算符5相等运算符!!6逻辑运算符先 与 后 或7赋值运算符8逗号运算符,七、语句1、表达式和语句1表达式表达式是可以被求值的代码JS引擎会将其计算出一个结果2语句语句是一段可以执行的代码2.程序三大流程控制语句顺序结构写几句就从上往下执行几句分支结构根据条件选择执行代码循环结构某段代理吗被重复执行3.分支语句3.1分支if分支语句1单分支if分支语句1语法if(条件){满足条件要执行的代码}2注意小括号内的结果容不是布尔值会发生隐式转换为布尔值数字型0为假非0为真字符型’ 空为假非空为真2双分支if分支语句1语法if(条件){满足条件要执行的代码}else{不满足条件需要执行的语句}2双分支if分支语句1)语法if(条件1){代码1}elseif(条件2){代码2}elseif(条件3){代码3}...else{代码n}3.2三元运算符1语法条件?满足条件执行的代码:不满足条件执行的代码3.3switch语句1语法switch(数据){case值1 代码1breakcase值2 代码2breakdefault:代码nbreak}(2注意找到跟小括号里面数据全等的case值并执行里面对应的代码若没有全等 的则执行default里的代码switch case语句一般用于等值判断不适合于区间判断switch case一般需要配合break关键字使用没有break 会造成case穿透3.4 if多分支语句和switch的区别1共同点都能实现多分支选择大部分情况下可以互换2区别switch…case语句通常处理case为比较确定值的情况而if…else语句更加灵活通常用于范围判断大于等于某个范围switch语句进行判断后直接执行到程序的语句效率更高而if…else语句有几中判断就得判断多少次switch一定要注意必须是全等一定注意数据类型同时注意break否则会有穿透效果3结论当分支较少时if…else语句执行效率高当分支较多时switch语句执行效率高4.循环语句1while 循环1语法while(循环条件{循环体}2循环三要素变量起始值终止条件变量变化量3循环结束break退出循环continue结束本次循环继续下次循环2for 循环1语法for(变量起始值;终止条件;变量变化量){循环体}2退出循环continue 退出本次循环break 退出整个for循环3无限循环while(true) 构造“无限”循环需要使用break退出循环for(; 构造“无限”循环需要使用break退出循环4for循环和while循环的区别如果明确了循环次数的时候推荐使用for循环如果不明确循环次数的时候推荐使用while循环八、冒泡排序1.外层for循环(i)循环数组长度-1次2.内层for循环(j)循环数组长度-i外层循环计数起始值为0-1 次比较arr[j]与arr[j 1]符合条件的进行交换九、函数1.定义是被设计为执行特定任务的代码块2.说明函数可以把具有相同或相似逻辑的代码“包裹”起来通过函数调用执行这些被“包裹”的代码逻辑以便于代码复用3.函数使用1函数声明function函数名(){函数体}2函数命名规范和变量命名基本一致前缀应该为动词命名建议常用动词约定can判断是否可执行某个动作has判断是否含某个值is判断是否为某个值get获取某个值set设置某个值load加载某些数据3函数的调用方法函数名()4函数体函数体是函数的构成部分它负责将相同或者类似代码“包裹”起来直到函数调用时函数体内的代码才会被执行。函数的功能代码都要写在函数体当中。3.函数传参1声明语法function函数名(参数1,参数2参数3,...,参数n){函数体}2调用语法函数名(传递的参数列表)3参数类型形参声明函数时写在函数名右边小括号里的叫形参形式上的参数实参调用函数时写在函数名右边小括号里的叫实参实际上的参数开发中尽量保持形参和实参个数一致未给实参的参数默认值为undefined在定义函数时给形参赋值表示在缺少实参参数传递时形参的默认值为该值实参也可以是变量4.函数的返回值return返回值5.细节定义两个函数名相同的函数时 后面的会覆盖前面的函数实参和形参的个数可以不一致实参多于形参时多出的实参不参与运算实参少于形参时少的实参默认值为undefined6.函数的作用域1定义限定变量名的可用性的代码范围就是这个名字的作用域2分类全局作用域局部作用域3特殊情况如果函数内部变量没有声明直接赋值可当作全局变量看函数内部的型看可以看作是局部变量5访问原则在能够访问到的情况下先局部局部没有再找全局7.匿名函数1函数的分类具名函数匿名函数2匿名函数的调用1函数表达式letfnfunction(){}fn()必须先声明后调用2立即执行函数(function(){})();(function(){}());两个立即执行函数必须用分号隔开加在末尾或者开头都可以作用防止变量污染十、对象1.定义是一种数据类型一种无序的数据集合用来描述某个事物2.对象的使用1声明语法let对象名{}let对象名newObject()2对象的组成属性信息或特征名词属性都是成对出现的包括属性名和值他们之间用英文:隔开多个属性之间使用英文,分隔开方法功能或行为动词3.属性1查询属性对象名.属性 对象名[属性名]2修改属性对象名.属性新值3增加属性对象名.新属性值4删除属性delete对象名.属性4.方法1方法声明语法方法名:function(){...}2方法调用对象名.方法名5.遍历对象for(letkin对象名){console.log(k)//属性名console.log(对象名[k])}6.内置对象1Math提供了一系列做数学运算的方法radom 生成[01)之间的随机数ceil向上取整floor向下取整round四舍五入max找最大数min找最小数pow幂运算abs绝对值…2示例生成[01随机数Math.radom()生成0-10随机整数Math.floor(Math.radom()*(101))生成N-M随机整数Math.floor(Math.random()*(M-N1))N