js的运算符
算数运算符
+ 相加求和,如果用在字符串则是拼接
-相减求差
*相乘求积
/相除求商
%模除求余
具体用法如下
let num = 154
let num2 = 15
document.write(num+num2)
document.write(`<br>`)
document.write(num-num2)
document.write(`<br>`)
document.write(num*num2)
document.write(`<br>`)
document.write(num/num2)
document.write(`<br>`)
document.write(num%num2)
document.write(`<br>`)
最后输出结果
赋值运算符
a=b,把b赋值给a
a+=b,a=a+b
a-=b,a=a-b
a*=b,a=a*b
a/=b,a=a/b
a%=b,a=a%b
自增自减运算符
let num = 114514
num++ 等价于 num=num+1
num-- 等价于 num=num-1
每次增或者减的单位都是1
比较运算符
let a=12,b=22
a>b false,a大于b,判断为假
a<b true,a小于吧=b,判断为真
a>=b false,a大于或者等于b,判断为假
a<=b true,a小于或者等于b,判断为真
a!=b true,a不等于b,判断为真
a!==b true,a不全等于b,判断为真
a==b false,a等于b,判断为假
a===b false,a等于b并且a与b类型相同,判断为假
如果a是100,b是"100",则a==b为true,a===b为false。
如果a是100,b是100,则a==b为true,a===b为true。
a!==b a和b不相同,并且类型也不同
大于小于这些都和==类似,不判断类型是否相同
逻辑运算符
&& 两边同时为真则为真
|| 两边有一个真就是真,如果都是假则为假
! 布尔值反转,真变假,假变真
^ 二进制的运算
a = 0111 0101
b = 1001 1010
a^b = 1110 1111
二进制相同位数的值不同为1,相同为0
短路:
在a&&b运算的时候如果a判断为假,则整个a&&b都为假,不会判断b
在a||b的运算的时候,如果判断a为真,则整个a||b为真,不会判断b
三元运算符
a ? b :c
如果a为真,值为b,否则值为c
//补0案例 输入1 输出01
let num = prompt("input a number")
document.Write(`${num < 10 ? "0"+num : num}`)
输入小于十的数会补一个0
if语句
if,判断
if(表达式){
语句
}
如果表达式的为真,则执行语句。为假不执行
if...else...
if(表达式){
语句a
}else{
语句b
}
如果表达式为真执行语句a否则执行语句b
if...else if...else
if(表达式1){
语句a
}else if(表达式2){
语句b
}else{
语句c
}
如果表达式1为真执行语句a,如果表达式1为假去判断表达式2,如果表达式2为真执行语句b,如果表达式2为假执行语句c。可以嵌套很多很多很多很多很多很多个if else
switch语句
let num=2
switch(num){
case 1:
document.write("1")
break
case 2:
document.write("2")
break
case 3:
document.write("3")
break
default:
document.write("0")
}
根据num去匹配对应的。num=2,则case 2匹配,执行case2的语句
要求:num和1类型相同,值相同才会匹配。
document.write("2")
break
break用于跳出switch语句不然case3 和 default都会被执行
while语句
while(循环条件){
循环体
}
如果循环条件为真则执行循环体代码,为假结束循环
可以使用break直接结束整个循环,continue跳过本次循环进入下一个循环
for语句
for(a;b;c){
循环体
}
a一般是用于变量的初始化,b是循环条件,c用于循环变量更新。而且abc三个语句都是可以省略的
可以使用break直接结束整个循环,continue跳过本次循环进入下一个循环
js函数
函数的声明
无参函数声明:
function 函数名(){
函数体
}
调用:函数名()
带参函数声明
function 函数名(参数列表){
函数体
}
调用:函数名(对应参数)
由于js的变量无论什么类型都是一样的表示形式,所以参数列表里面只需要写变量名就可以了。
function sum(num1,num2){
return num1 + num2[5];
}
let num = sum(1,[3,4,5,6,7,8,9])
document.write(num)
return x 返回变量x,函数一旦执行了return就会立即终止,不会继续执行下去。
同样,我们并不确定函数接收到了参数没有,如果没有传递参数,在运行的时候也是不会报错的。所以就需要我们给变量形参一个默认的值。这样就可以有一个兜底的情况。我们也可以在这里声明形参所需要的实参是什么类型的。
如果我们想检测我们传递的参数类型是否正确,不正确就打印出函数实参类型错误。
function sum(num1 = 0,num2 = 0){
if(typeof num1 === "number" && num2 ==="number")
{
return num1 + num2
}else{
console.log("error")
}
}
或者直接给形参和返回值加个限制
function sum(num1:number,num2:number):number{
return num1 + num2
}
function sum(num1:number,num2:number):number里面的:number就是说这个参数类型是number类型,如果不是就会报错。形参列表外面的:number就是对函数返回值的限制
现在为止我们所学到的数据类型有
- number 数字类型
- string 字符串
- bool 布尔值
- undefined 未定义
- null 空
- array 数组
总结:函数的作用在于将一段可能被多次使用的代码整合在一起,方便多次使用。
js匿名函数
具有函数名的函数成为具名函数,我们上面讲的就是具名函数。
匿名函数就是没有名字的函数,匿名函数的调用可以有一下方法:
1.将匿名函数赋值给变量
let alpha = function(num1: number, num2, num3): number {
return num1 + num2 + num3;
}
let a = alpha(1,2,3)
console.log(a)
相当于把一个函数赋值给一个变量,调用的时候变量名代替了函数名。
2.立即执行函数
(function(x,y){
console.log(x*y)
})(5,4);
//结果打印20到控制台
这个函数会被直接执行,不需要调用,也没法调用。而且立即执行函数之间要加分号
js对象
定义
let name = {
属性名:属性值,
方法名:函数
}//逗号隔开,最后一个不需要加逗号
有点像GO语言的map,c的结构体,python的字典之类的。
访问
name.属性名 得到 属性值
name.方法名() 调用函数
对象的增删改查
1.增
let goods ={
name:"小米",
id : "100012816024",
weight : 0.55,
address : "中国大陆",
}
goods.money = 1999
对象名.新属性名 = 新值。完成添加操作
2.删
let goods ={
name:"小米",
id : "100012816024",
weight : 0.55,
address : "中国大陆",
}
delete goods.name
delete 对象.属性 删除指定的属性
3.改
let goods ={
name:"小米",
id : "100012816024",
weight : 0.55,
address : "中国大陆",
}
goods.name = "华为"
对象.属性 = 新值 更改值,如果不存在对应属性就是增操作
4.查
let goods ={
name:"小米",
id : "100012816024",
weight : 0.55,
address : "中国大陆",
}
goods.name
对象.属性 查询操作,返回属性的属性值
对象的操作增删改查都可以使用对象名["属性名"]来代替
对象.name === 对象["name"]
delete 对象.name === delete 对象["name"]
对象.name = "qwe" === 对象["name"]="qwe"
遍历对象
for(let x in 对象){//x是属性的名,也就是循环的把对象里面的属性名或者方法名轮番赋值给x
console.log(对象[x])//输出对应的参数,如果是函数则会打印该函数,不运行
}