JavaScript提升
(一)JS操作符
(1)算术运算符
算术运算符(基础数字运算)( + - * / %)
当不是数字之间的运算的时候,+号两边一旦有字符串(引号引起的部分),那么+号就不再是数学运算了,而是拼接,最终结果是字符串。
-/*% 尽量将字符串转换成数字(隐式类型转换)
NaN: Not a Number number
<body>
<script>
// 算术运算符(基础数字运算) + - * / %
a = 10
b = '2'
c = 'zs'
console.log(a + 1); //输出值为11
console.log(a + b); //隐式转换,+为字符串拼接,输出值为102
console.log(a + c); //隐式转换,+为字符串拼接,输出值为10zs
console.log(a - b); //隐式转换,输出为8。数值和数字类型的字符串相减,字符串会默认转为数值做算数运算
console.log(a - c); // NaN -- Not a Number
console.log(a * c); // NaN -- Not a Number
/*
当不是数字之间的算数运算时,+号两边一旦有字符串
不再是数学运算,而是字符串拼接,最终就是字符串
非数字的字符串和数值之间做减法运算结果就是一个NaN,不是一个数字
乘除余皆是如此
*/
</script>
</body>
(2)赋值运算符
+= ; -= ; *= ; /=; =; 这些是基本的赋值运算符,除此之外还有++; --,这两个都存在隐式类型转换,会全部转成数字。
<body>
<script>
// += -= *= /= = 这些是基本的赋值运算符
// 特殊赋值运算符++ --
a = 10
b = '2'
c = 'zs'
// console.log(a+=1) //输出为11
// console.log(a-=1) //输出为9
// console.log(a*=2) //输出为20
//
// console.log(a++) //先输出a,显示为10,在10的基础上加1不显示
// console.log(a) //在上面的基础上在输出a则为11
// console.log(++a) //先加1在输出a为11
//
// console.log(a--) //先输出a,显示为10,在10的基础上减1不显示
// console.log(a) //在上面的基础上在输出a则为9
// console.log(--a) //先减1在输出a为9
/*
赋值运算符++,写在数值的后面,二次输出的时候,值才会改变,
++写在值前面,值立马就加一,
--等同以上。
* */
</script>
</body>
(3)逻辑运算符
JS中的逻辑运算用:&&(与 and)、||(或 or)、!(非 取反 not)来表示。 && 和 || 不会进行类型转换,!则会进行类型转换,将后面的数据先转换为布尔型在取反。
<body>
<script>
// 逻辑运算用:&&(与 and)、||(或 or)、!(非-取反 not) 来表示
a = 10
b = '2'
c = 'zs'
// &&(与 and)
console.log(a>2 && a>3) //布尔值 true和false
console.log(a<2 && a<3) //布尔值 true和false
console.log(a>2 && a<3) //布尔值 true和false
console.log(a>2 || a<3) //布尔值 true和false
console.log(! a>2) //布尔值 true和false
//多重逻辑运算符使用 ! > && > ||
console.log(! a>2 && a>3 || a>9) //true
</script>
</body>
(4)比较运算符
<,>,!=,>=,<=,==
(恒等于),===
(全等于)
如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字进行比较。
如果等号两边出现了null或undefined,null和undefined除了和自己相等,就彼此相等
NaN==NaN 返回false,NaN和所有值包括自己都不相等。
<body>
<script>
a = 10
b = '2'
c = 'zs'
// > < != >= <= == ===(全等于) 比较运算符
console.log(a > 2) //true
console.log(a == 10) //true
console.log(a == '10') //true 只比较值,不比较类型
console.log(a === 10) //true 即比较值,也比较类型
// null或undefined的特殊比较
console.log(null == undefined) // true 值相同
console.log(null === undefined) // false 类型不相同
console.log(NaN==NaN) // false
</script>
</body>
(二)JS流程控制
JS中流程控制是if判断和switch选择。
(1)if判断
<body>
<input type="text" placeholder="今天天气怎么样?" id="inp">
<button id="btn">提交</button>
<script>
// 天气分析案例:
inp = document.getElementById('inp')
btn = document.getElementById('btn')
btn.onclick = function () {
weather = inp.value
if(weather==='晴天'){
console.log('去逛街!')
}
else if(weather==='下雨'){
console.log('在家写作业')
}
else{
console.log('在家追剧')
}
}
</script>
</body>
(2)switch选择
<body>
<input type="text" placeholder="今天天气怎么样?" id="inp">
<button id="btn">提交</button>
<script>
inp = document.getElementById('inp')
btn = document.getElementById('btn')
btn.onclick = function () {
weather = inp.value
switch (weather) { //switch(要判断的变量)
case '晴天': //case全等于的意思 case+值:
console.log('去逛街!')
break; // 流程控制语句的结束 一定要加break,否则会一直向下执行
case '下雨':
console.log('在家写作业')
break;
default:
console.log('在家追剧')
break
}
}
</script>
</body>
(3)三元表达式(类似于Python的三目运算)
作用:简化简单的if语句
形式:
1.语法:
2.变量 = 条件语句?表达式1:表达式2
<body>
<script>
num = 1
// if(num>5){
// console.log('是的')
// }
// else{
// console.log('不是')
// } //正常if循环
res = num>5?'是的':'不是' //简化后
console.log(res)
</script>
</body>
(三)JS循环
循环三要素:循环的初始值、循环的结束条件、循环体。
(1)while循环
形式:
1.语法:
2. while (循环的结束条件){循环体}
例:
<body>
<script>
a = 1
while (a<=5){
console.log(a)
a++ //累加
}
</script>
</body>
(2)do while循环
先做事情再做判断
形式:
1.语法:
2.do{循环体}while(结束的条件)
例:
<body>
<script>
a = 1
do {
console.log(a)
a++
}while (a<=5)
</script>
</body>
(3)for循环
形式:
1.语法:
2.for(初始变量;循环的结束条件;初始变量的累加) {循环体}
例:
<body>
<script>
for (a = 1; a <= 10; a++) {
// if(a===5){ /可以添加if循环
// break //终止循环
//continue //跳过当前循环
// }
console.log(a)
}
</script>
</body>
(4)for in 循环
形式:
- for(虚构变量 in 迭代对象){循环体}
例:
<body>
<script>
a = 'abc'
for(i in a){
console.log(a[i]) // 迭代对象的索引
}
</script>
</body>
(四)JS字符串方法和数组方法
(1)字符串方法
<body>
<script>
st = 'this is string'
dic = {'a': 1, 'b': 2}
// 长度
// console.log(st.length)
//取值
// console.log(st[3]) //索引切片取单值
// console.log(st.slice(1,6)) //取双值 左闭右开
// console.log(st.slice(1)) //向后取所有
// console.log(st.substring(0,6)) //字符截断 左闭右开
// console.log(st.substring(0)) //向后取全部
// console.log(st.substr(3,3)) //字符截取(从3开始向后取3个)
// 对象方法
// console.log(Object.keys(dic)) //下标
// console.log(Object.values(dic)) //值
// 切割
// console.log(st.split('')) //按空字符切割
// console.log(st.split(' ',2)) //按空格切割,切割保留n个元素
//替换
// console.log(st.replace('is','IS')) //替换单个
// console.log(st.replaceAll('is','IS')) //替换所有
// console.log(st.replace('is','')) //替换用作删除
// 修改
// console.log(st.toUpperCase()) //转大写
// console.log(st.toLowerCase()) //转小写
//查找
// console.log(st.indexOf('i'))
// console.log(st.indexOf('i',3)) // 指定位置找索引,从3向后
//转类型
// nu = 123
// nu2 = '1.56'
// res = nu.toString() //转字符串
// console.log(typeof res) //string
// console.log(parseInt(nu2)) //1 转整数
// console.log(parseFloat(nu2)) //1.56 转小数
</script>
</body>
(2)数组方法
<body>
<script>
//数组方法
// arr = [1, 2, 3, 4, 5]
//长度
// console.log(arr.length)
//取值
// console.log(arr[1]) //通过索引取值
// console.log(arr.slice(1,4)) // 通过切片取值
// console.log(arr.slice(1)) //向后取所有
//增
// arr.push('python', 'js') // 默认向后添加
// arr.unshift('aa','bb') //向前添加
// console.log(arr)
//删除
// arr.pop() //单个删除一个,默认从后开始删
// arr.shift() // 单个删除一个,默认从前开始删
// arr.splice(2,2) // 从索引位置,删除个数
// arr.splice(2,0,'aa','bb') // 索引位置,删除个数,追加的元素
//修改
// arr[0] = 111
// arr[6] = 111 //有责改,无责增
//查
// console.log(arr.indexOf(2)) // 索引
// 排序
arr = [3,1,2,6]
// console.log(arr.sort()) //升序
// console.log(arr.reverse()) //降序
//数组拼接
// console.log(arr.join("-")) //join当中就是拼接的分隔符
</script>
</body>