是高级编程语言,解释性语言,有逻辑性,像计算机主动发出命令。运行在客户端的脚本语言。
格式严,打包少分号,或注释//后无空格就会在eslint报错。严格区分大小写。浏览器调试。
作用:表单动态校验,网页特效,服务端开发,桌面程序,App,控制硬件-物联网,游戏开发。浏览器有渲染引擎,JS引擎
在script内部,由ECMAScript(JS语法),DOM(页面文档对象模型),BOM(浏览器对象模型)组成。
---------------------------------------------------------------------------------------
数据类型:数值,超文本; //变量都用var定义,名字不能数字开头,也可以汉字。但是后面有严格检查模式strict:'use strict'; 局部变量建议let,报错时要让编译器支持ES6语法,必写在script第一行。
ES6中局部变量用let定义
1.整数和小数,负数,科学计数法都可输出,不区分类型。NaN,Infinit不行。
2.字符串
‘’,“ab”,“\n”
"\'"打印特殊符号 "\uXXXX" Unicode字符;"\x41" Ascll字符;
多行``引;
模板字符串let msg=`你好${name}` //name里有变量值
字符串长度console.log(student.length)
字符串的不可变性 student变量附好值,student[2]=1不会使student输出改变;直接输出时调方法则可以大写。
大小写转换:这里是方法不是属性。console.log(student.toUpperCase()) log(student.toLowerCase())......
.indexOf('t') 1字符t第一个出现的位置下标。
.subString(1)取下标1和1之后的 (1,3)下标含1不含3和之间的
3.布尔值:通过比较等获得true,false
4.逻辑运算&&与,两真才真 || !
5.比较运算===常用 NaN===NaN false isNaN(NaN) true ;NaN包括自己不全等与任何数,只能通过isNaN(NaN)判断是否是NaN
*。浮点数存在精度损失console.log(1/3===(1-2/3)) false
Math.abs(两数相减)<0.00000001判断浮点数是否相等
*。null和undefined
6.数组:一组类型可以不同的[],越界undefine
var arr=[];
和字符串不一样,可改变某个值,还可改变长度未赋值的为空,如果赋值过小,元素就会丢失
7.对象{}
---------------------------------------------------------------------------------------
1.输入输出语句
输出弹出框:alert('');
控制台输出:console.log('');
输入框:prompt('请输入您的年龄');
2.变量
在内存中申请一块存数据的空间。
变量使用分为声明,赋值。
声明变量:var age;//声明一个名为age的变量,计算机自动分配空间
赋值age=10;
或var age=18;//变量的初始化
变量语法的扩展:
1.更新变量,2.声明多个变量,3.声明变量的特殊情况(声明不赋值undefined,不声明不赋值直接使用,报错)
变量命名规范:字母数字_$(分大小写,数字不能开头,不能是关键字保留字,不用name做变量名,驼峰命名)
www.iciba.com
交换变量
3.数据类型
JS属于弱类型动态语言,变量数据类型只有程序运行时根据等号右边的值自动确定。
数据类型可直接改变。
简单数据类型(number-0,string-"",boolean-false,undefinded-undefinded,null-null)
数字型进制(输出默认转为十进制)
八进制:数字前0;十六进制:数字前0x
数字型范围
alter(Number.MAX_VALUE);
alter(Number.MIN_VALUE);
数字型三个特殊值
isNaN判断:非数字返回true
2.字符串型
""/''JS推荐''
字符串嵌套:外单内双(因为就近匹配)或外双内单
换行:JS用转义符实现\n换行,\b空的格子,\t缩进√,转义字符要写到引号里面
检测获取字符串长度
console.log(str.length);
字符串拼接:字符串+任何类型=新字符串,数值相加字符相连
数字+数字=新数字
字符串拼接加强:
变量和字符串拼接口决:引引加加
3.布尔型
true在加法运算中当1,false当0
var variable=undefined;//相当于只定义不赋值+’pink‘新字符串,+1为NaN
null
var space=null;+'pink'->nullpink +1=1
获取变量数据类型
var num=10;
console.log(typeof num)
prompt取过来的值是字符型,不能+数得正确结果
控制台颜色
蓝:数字/Boolean
白:字符串
灰:未定义/空值
字面量:看值分析是什么类型
数据类型的转换:prompt和表单取得值是字符串类型,若数字运算前需转类型
转字符串:
XX.toString()
String(XX);
+拼接 隐式转换 XX+''
转数字型(重点)
parseInt(string)函数,转整数,保留小数的整数部分,混合型类型时非数字及部分不显示(去单位),过于混合显示NaN
parseFloat(string)函数,转浮点数
Number()强制类型转换
隐式转换(-*/) '12'-0 '12'-'11' '12'*1 '12'/1 ->+一定要转换
转布尔型
Boolean()
表示空否定转为false,如'',0,NaN,nullundefined
其余全部转为true
标识符:起的名,不是关键字和保留字
JS运算符
算数,自增自减,比较,逻辑,赋值运算符
算数:+-*/%
浮点数在算数运算中会有问题:小数十进制先转二进制再转十进制造成的误差,因此也不能用浮点数相比较判断两浮点数是否相等。
自增自减:和变量配合
比较运算符(关系运算符),有返回结果true,false
<,>,<=,>=,==(会转型,隐式转换),!=,===,!==全等不全等,即非全等(之和数据类型都一致)
逻辑运算符(多个条件)根据真假,但返回具体值
&&并且,||或,!非
bool值参与逻辑运算,
值和表达式参与逻辑运算(短路运算/逻辑中断)重要
左边可定结果不再算右边
&&表达式1为真,返回表达式2
假,返回表达式1
赋值运算符:
=,+=,-=,*=,/=,%=
运算符优先级:
括号>一元运算符>二元运算符>比较运算符>相等运算符>逻辑关系运算符>赋值运算符>逗号
复杂数据类型(object)
Js流程控制-分支
流程控制:控制代码按不同结构顺序来执行。
顺序结构:默认
分支结构:if(){},if{}else{},if(){}else if(){}..else{}
三元表达式:++num一元,1+5二元,条件表达式?表达式1:表达式2
条件表达式由变量常量,比较符和&&||组成,值为0,1
表达式有求得的有意义的结果,是有返回值的,因此应赋给一个变量。
详单与简化版的一个if{}else{}
switch
switch(表达式){ //看表达式与哪个value相匹配,break跳出switch
case value1:
执行语句;
break;
... ...
default:
执行语句;
}
相当于if{}elseif{}的简化版,而且直接跳转效率比ifelseif高;多加限定条件:判断条件为特定值,不是区间;分支多但用case效率高。
表达式的值和case值必须全等才能匹配。
只有遇break或default跳出switch
循环结构:for(){}while(){}do{}while(){}循环体+终止条件
continue,break
调试断点:打开网页设置断点后刷新,蓝色到说明下一步要执行该语句还未执行
可调试断点和控制台切调试程序,或右侧watch+变量名
帮助观察程序运行过程
for
1.执行相同语句
2.有计数器i存在,随次数数值发生不同变化->可循环执行不同代码,甚至算术运算
3.可嵌套分支语句