前端学习——01——js的赋值和运算符

//Js基本语法
    值类型---数据类型
             不可改变的原始值(栈数据) number string boolean undefined(声明了变量未赋值) 例如:var a; //a自动被赋值为undefined
null(表示一个变量将来可能指向一个对象。)
    引用值(堆数据)
              array object function         

原始值为什么是不可改变的呢,假如先给num赋值100,后改成200,原来的房间的名字改成1011,值不会改变,重新创建一个房间命名为num并赋值200

原始值和原始值比对的是值,引用值比较的是地址,地址一样才相等 

 

比如这样是相等的:

首先看以下概念

根据数据类型的的不同,有的变量存储在栈中,有的存储在堆中。

  • 原始变量类型及他们的值存储在栈中,当吧一个原始变量传递给另一个原始变量时,是把一个一段栈空间的内容复制到另一段栈空间,这两个原始值互相不影响。

  • 引用值是把引用变量的名称存储在栈中,但是把其实际对象存在堆中,且存在一个指针有变量名指向存储在堆中的实际对象,当吧引用对象传递给另一个变量时,复制的其实是指向实际对象的指针,此时,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会随之加以改变;但若不通过方法,而是通过重新赋值 此时 相当于 重新开了一段内存 该值的原指针改变 ,则另外一个 值 不会随他的改变而改变。

  • 原始值不能被改变

一:js的赋值

看这几行代码:

<script type="text/javascript">
			//document.write("hello worldss");
			var arr=[1,2];
			var arr1=arr;
			arr.push(3);
		     alert(arr);
			alert(arr1);
		
		</script>

输出是1,2,3和1,2,3

为什么呢?可以看这张图

arr1指针指向和arr相同的堆,当arr再赋值3进入后,arr和arr1的值都变为1,2,3

再看第二段代码

<script type="text/javascript">
			//document.write("hello worldss");
			var arr=[1,2];
			var arr1=arr;
			arr.push(3);
			arr=[1,3];
		     alert(arr);
			alert(arr1);
		
		</script>

输出是1,3和1,2,3

重新开辟一个内存,存入1,3,然后arr的指针指向1002  

 下面这个例子为什么第一种写法会报错呢,是因为.的执行顺序优先,会首先以为123.是浮点型,浮点型后面不能加字母,所以就报错了,另外数字怎么会有toString()方法呢,见原型包装类和原型链的文章

加号(+)可以是求和也可以是字符串连接  var a=1+1+"a"+(1+2)  a为2a3

反正应该得出数字类型的值但是又没法表示的会返回NaN(not a number) 比如var a=0/0

运算顺序为先执行等号右边的,a+1为11再赋给a,赋值的顺序自右向左,计算的顺序自左向右

&&运算符的使用

碰到假就停

 

 

比如说var a=1&&2  1为真直接返回2 不会返回true的,因为2的布尔值为真,所以是真,如果是var a=1&&0因为1为真直接返回0,0的布尔值为假。且后面的+2也不会执行

如果第一个表达式为false,直接返回第一个值不再往后走   var a=0&&2 返回0 0转换为布尔值是假

那么&&代表只要有一个为假就是假,全真才为真,因为假如第一个表达式为假返回的也是假,如果第一个为真,第二个为假,因为第一个表达式为真会直接返回第二个表达式,因为第二个表达式为假所以还是假。

如果是三个表达式 碰到假就立刻返回 不会再执行,为真就继续执行

如果不关注它的返回值,可以作为短路语句,if的简写形式

 有时候后端传过来的数据不一定能用,直接写会报错,我们可以用&&判断一下,正确才执行我们的语句,比如传参,传过来才执行

 ||或运算符

碰到真就停 ,第一个是真就直接返回,碰到真就返回,不往后看,碰到假就往后看,如果是两个表达式第一个为假就返回第二个。

用法可写兼容

 !非运算符

undefined ,null, NaN   ,""(空串),0, false布尔值都是false

非运算符都是转换为布尔值再取反

 if括号里不是为false的那六个值,那条件就成立会往下执行。这个函数当完条件之后自己也产生了变化,括号里会把里面的东西变为表达式,变为表达式之后就不是函数定义了,f函数从此消失;了。打印的结果是1undefined  这里不会报错是因为任何未定义的变量只有在type of后面才不会报错,然后返回的“undefined”是字符串形式,+是字符串连接,所以结果是1undefined

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值