js中的小点点

访问对象的属性

!. 当访问对象的属性时:如果该属性不存在时,则访问结果为: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

  1. 如果被除数是正数,得到结果Infinity(正无穷)
  2. 如果被除数是负数,得到结果是 - infinity (负无穷)
  3. 如果被除数为0,得到结构是NAN(非数)
    isFinite函数,用来判断一个数据是否有限
isFinite(1.3); 	//true
isFinite(infinity);	//false
isFinite(-infinity);	//false
isFinite(0/0);	//false
isFinite(NAN);	//false

算术运算符

常见算术运算符: 加、减、乘、除、取余、求模、自增、自减

除了加号以外的算术运算符,其他的都可以将原始类型转换为数字类型

  1. boolean: true --> 1; false–>0
  2. string : 如果字符串内部是数字,则转换为数字;如果看起来不是数字(1.2.2.2或23ass)则转换成NAN
  3.  		如果字符串是空字符串(即没有任何内容)则转换数字类型为0;如果字符串里面即使有空格
     		   也会忽略前后的空格最终转为0;
    
eg
+"" ---> 0;
+" " ---> 0;
  1. 注意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. 加法、减法
    优先级运算的细节

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值