文章目录
访问对象的属性
!. 当访问对象的属性时:如果该属性不存在时,则访问结果为:undefined
2. 当访问对象的属性时:如果该对象不存在时,则访问结果则会出错。
<script>
var a;
//报错:Cannot read property 'name' of undefined
console.log(a.name);
var obj = {};
//结果不会报错:undefined
console.log(obj.name);
</script>
分析:
1.这里的a虽然进行了声明,但充其量是一个原始类性的数据,而原始类型的变量是不可能有属性的,因此报错
2.输出obj的属性不会报错,是因为它是一个对象,只不过是一个没有任何属性的空对象,但是对象时可以拥有属性的,只不过是人家没有赋值,因此结果是 undefined
除数和取余
被除数 / 除数 = 商
商的正负与被除数和除数的正负有关
余数的符号仅仅与被除数有关
除数为0
- 如果被除数是正数,得到结果Infinity(正无穷)
- 如果被除数是负数,得到结果是 - infinity (负无穷)
- 如果被除数为0,得到结构是NAN(非数)
isFinite函数,用来判断一个数据是否有限
isFinite(1.3); //true
isFinite(infinity); //false
isFinite(-infinity); //false
isFinite(0/0); //false
isFinite(NAN); //false
算术运算符
常见算术运算符: 加、减、乘、除、取余、求模、自增、自减
除了加号以外的算术运算符,其他的都可以将原始类型转换为数字类型
- boolean: true --> 1; false–>0
- string : 如果字符串内部是数字,则转换为数字;如果看起来不是数字(1.2.2.2或23ass)则转换成NAN
-
如果字符串是空字符串(即没有任何内容)则转换数字类型为0;如果字符串里面即使有空格 也会忽略前后的空格最终转为0;
-
eg
-
+"" ---> 0;
+" " ---> 0;
- 注意1:对于infinity也是一种数字的书写方式,因此转换的时候结果不为NAN
+infinity ---> +infinity
-infinity--> -infinity
4.注意2:NAN虽然是数字类型,但是它和任何数进行运算,结果都是NAN
5.注意:
+null --> 0
;
-null --> -0
underfined --->NAN
6.对象:首先将对象转换为字符串类型,然后在将该字符串转换为数字类型(object—>NAN)
注意:
{} * 5 --->会报错,这里可能会把{}当做代码块
({})* 5-->NAN;或者({} * 5)-->NAN; 这里是加上了()是得{}变成了表达式
运算符是加号
1.加号两边都是字符串:则加号则为拼接功能
2.加号两边只有一个是字符串:则会将非字符串的那一边转换成字符串,然后在进行拼接
注意:当两边是进行算术运算时,不进行拼接
null + null ---> 0
;
null + 'null' --> "nullnull"
3.加号两边都没有字符串但是有一边为对象,则会将对象转换为字符串[object Object];然后在进行
({} +12) -->"[object Object]12"
算术运算符的优先级
算术运算符的优先级大于比较运算符
自增、自减
乘法、除法、取余(%)
加法、减法
优先级运算的细节
1.从左到右依次查看
2.如果遇到操作数则将数据直接取出
.3.如果遇到两个相邻的运算符,并且左边的运算符的优先级大于等于右边的运算符的优先级,那么直接运行左边的运算符
注:由于自增、自减是作用到变量上,因此他们的数据是不可以直接拿出来,当比较相邻的操作符的优先级在进行取值
console.log("" + 3 % 2); // '1'
console.log(+"" + 3 % 2); //console.log(0 + 3 % 2); ---> 1
console.log(+{} + ""); // console.log(NAN + "");---> 'NAN'
console.log(null / null); // NAN
var a;
console.log(a + {} + 123); // console.log(undefined + [object Object] + 123); --->undefined[object Object]123
console.log(1 + "" + 1 + 2); // console.log('1' + 1 + 2); --->'112'
console.log({} * null); // console.log(NAN * null);--->NAN
console.log(+"" + 100); //console.log(0 + 100); -->100
1.如果{}前后没有字符串,对象转换为字符串[object Object]
2.数学运算中对象的转换:首先将对象转换为字符串类型,然后在将该字符串转换为数字类型(object—>NAN)
比较运算符
常用比较运算符如下
大于、小于、大于等于、小于等于
1.两个字符串比较,比较的是每一位的字符编码(按位进行比较)
console.log('11' > '2'); //true 因为'1'的字符编码>'2'的字符编码
console.log('11' > '12'); //true
console.log('11' > '1'); //true 由于第一位都是'1',因词比较第二位,后面没有第二位默认为0,而'1'的字符编码为49。49>1
2.如果有一个不是字符串,并且都是原始类型,那么他们都将转换为数字在进行比较
注:
1.NAN与任何数字比较都为false
2.infinity比任何数都大
3.-infinity比任何数都小
3. 如果其中一个为对象,将对象转换为原始类型,然后按照规则1和规则2进行比较
注:目前将对象转换为原始类型后,是字符串"[object Object]"
console.log(null > -1); //两个都是原始类型; 0 > -1 true
console.log(undefined > -1) //都为原始类型 ; NAN > -1 false
等于、不等于、绝对等于(===
)和绝对不等于(!==
)
细节:
1.两端数据类型相等:原始值比较的是里面的数据;引用值比较的是里面的地址
2.两端数据类型不等:
(1): null 和 unfefined,他们之间相等;但是和其他原始类型比较则不等
(2)除了null 和undefined的其他原始类型,比较是则先转换为数字在进行比较
(3)NAN与任何数字比较都为false
(4)infinity 和 -infinity只能与自身相等
(5)对象比较:两端都是对象比较的是地址;只有一端为对象,先讲对象转换为原始类型[object Object]在进行比较
console.log(null >= 0); //两个都是原始类型; 0 >= 0 true
console.log(null == 0); // false
console.log('1' == true);// 1= 1 true
console.log(1 == true); //1=1 true
console.log(2 == true); //1 == 2 false
console.log(({} == 1)); // [object Object] == 1 ---> NAN == 1 false
console.log(NAN === NAN); //false
console.log(null === undefined); //false
console.log(null == undefined); //true