js中的运算符
比较运算符:">"、"<"、"=="、">="、"<="、"!="
- 返回值为boolean值
- 在"=="中的特例:NaN == NaN为false
逻辑运算符:"&&"、"||"、"!"
- 运算结果为真实值
- “&&”:先看第一个表达式转换成布尔值的结果,如果结果为真,那么他会看第二个表达式转换为布尔值的结果,然后如果只有一个表达式的话,只看第二个表达式,就可以返回该表达式的值了;如果第一个表达式为假,则不执行第二个表达式。多个表达式同理(为真往后走,遇到假就停止)
例如:var a=1 && 2;此时a=2,因为1转换为布尔值后为真,看第二个表达式,运算结果为2,于是结果为2.
应用:不关注返回值,可以当做条件判断来用:(如下,条件成立就打印hello)
2 > 1 && document.write('hello');
常用场景:后端向前端传输数据的时候,常用data && fun(data);表示如果数据不为空才执行下面的函数
- “||”:和"&&"相反,遇到真返回,遇到假继续。应用场景:var a = e || window.event;表示如果e有值就直接返回e如果没有值就往下看。
- “!”:先将表达式转换为布尔值,然后再取反,返回值为布尔值。
被认定为false的值:undefined、null、NaN、""、0、false
js中的条件语句和循环语句(基本和java类似)
条件语句:if…else…、if…else if…else…
循环语句:for语句、while语句、do…while…语句(基本不用)
switch语句与java不同,case后面可以是数字、字符串、布尔值或者其他变量(即可以是引用值)
class Person {
constructor(name) {
this.name = name;
}
}
var p = new Person('xiaoming');
switch (p) {
case new Person('xiaohong'):
console.log('xiaohong');
break;
case p:
console.log('xiaoming');
break;
default:
console.log("default");
}//控制台打印:xiaoming
break和continue的用法
数组和对象初探
数组:储存数据的仓库
var arr = [1, 2, 3, 4, "abc", undefined];
console.log(arr.length); //6 表示数组的长度
console.log(arr[0]); //1 访问数组中元素
arr[0] = "change";
console.log(arr[0]); //change 修改数组中元素
//遍历数组
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
对象:由属性名和属性值组成
- 属性名(key)可以加双引号也可以不加双引号
var peo={
name:'xiaoming',
age:40,
id:'0123',
isHandsome:true
}//定义对象
console.log(peo.name);// xiaoming 取出对象的属性
peo.name="kangkang";//修改属性
console.log(peo.name);//kangkang
typeof操作符:返回数据的类型
var a=123;
console.log(typeof(a));//number
1.六种数据类型:number、string、boolean、undefined、object、function
2.typeof的返回值为:number、string、boolean、object、undefined、function(注意:返回值都是string类型)
- 注意:返回object类型的不一定就是对象,例如typeof([1,2,3]),typeof(null)也会返object,这里表示的是引用类型。
- typeof()也可以写成typeof+空格+数据类型
3.js的类型转换
显式类型转换
- Number():将其他类型转换为数字类型
console.log(Number('123'));//123
console.log(Number(true));//1
console.log(Number(false));//0
console.log(Number(null));//0
console.log(Number(undefined));//NaN
console.log(Number('a'));//NaN
console.log(Number('abc123'));//NaN
console.log(Number('123abc'));//NaN
- parseInt():将数据转换为整形,遇到小数直接去掉小数位
console.log(parseInt('123'));//123
console.log(parseInt('123.9'));//123
console.log(parseInt(true));//NaN
console.log(parseInt(false));//NaN
console.log(parseInt(null));//NaN
console.log(parseInt(undefined));//NaN
console.log(parseInt('a'));//NaN
console.log(parseInt('abc123'));//NaN
console.log(parseInt('123abc'));//123 parseInt会从数字位开始,一直到非数字位再返回
//parseInt()可以接受两个参数,第二个参数表示将目标对象当成几进制来转换为十进制
var demo='10';
console.log(parseInt(demo,16));//16 把'10'当做16进制来转换
应用:parseInt(‘100px’);可用来取出像素的数值
- parseFloat():将数据转化为浮点数
- String():将数据转化为字符串
- Boolean():将数据转化为布尔值
- toString():将数据转换为字符串,但是undefined和null不能用toString(),它和String()的区别在于:
var demo = 123;
console.log(demo.toString());//123
console.log(String(demo));//123
//带参数的toString(),参数表示转化为几进制
var a=10;
console.log(a.toString(8));//12 表示将10转化为八进制
隐式转换
- isNaN():判断是不是NaN
原理:先用函数Number()将参数进行转换,将返回值在与NaN比较
console.log(isNaN('123'));//false
console.log(isNaN('abc'));//true
- ++/-- +/-(一元正负)
原理:内部先调用Number()方法将其转化为number类型
var a = '123';
a++;
console.log(a);//124
var a = 'abc';
a++;
console.log(a);//NaN
var a = 'abc';
console.log(+a);//NaN
console.log(-a);//NaN
console.log(typeof (+a));//number
console.log(typeof (-a));//number
- 加号:+
原理:两边只要有一个string类型就将另一个转化为string类型 - -*/%
原理:同样先调用Number()函数来转换,再进行计算
console.log('1' * 1); //1
console.log('1' - 1); //0
console.log('a' - 1); //NaN
- && || !
原理:调用Boolean()进行类型转换 - > < >= <=
原理:有数字进行比较就隐式转换为数字(调用Number()方法),字符串会逐个比较ACSII码
console.log('3' > 1); //true
var a = '3' > '2';
console.log(a);//true
console.log(typeof(a));//boolean
- == !=
原理:和数字比较的时候同样会进行隐式类型转换
console.log(1 == '1'); //true
console.log(1 == true); //true
特例:
console.log(undefined > 0);//false
console.log(undefined < 0);//false
console.log(undefined == 0);//false
console.log(null > 0);//false
console.log(null < 0);//false
console.log(null == 0);//false
console.log(undefined == null);//true
console.log(NaN == NaN);//false
不发生隐式转换
- === !==
console.log(1 === 1); //true
console.log(1 === '1'); //false
console.log(NaN === NaN); //false
练习:
console.log(false < true); //true 转化为0<1
console.log(2 > 1 > 0); //true 先算2>1返回1,1在与0比较
console.log(typeof(a));//undefined a未定义
console.log(typeof(typeof(a)));//string typeof()函数的返回值为string