前端基础JavaScript(基础语法,变量+数据类型,堆栈内存,运算符)

JavaScript

js的书写,每一条语句后面加; 代表语句结束
js语法错误会引发后续代码终止,但是不会影响接下来其他的代码块

JavaScript的引入

引入js有两种方法,很简单:
1 页面引入js,利用script标签
2 直接引入外部js

JavaScript变量

html/css不是变成语言,js是编程语言,需要给变量。
创建一个变量:

var a=100;

这句代码其实是两个过程,首先申请变量空间,然后赋值:
1 第一步,首先声明一个变量a,var a;
2 第二步 给声明的变量a赋值100,a=100;

变量的命名规则

1 头一位必须是英文字母,_,$开头。

2 变量名可以包含英文字母,_,$,数字。

3 不可以使用系统的关键字,保留名作为变量名,系统保留字如下
在这里插入图片描述

变量之间的运算

等号右边的值(内容)先进行运算,运算结束后,把结果值赋给等号右边

JavaScript的数据类型

JavaScript是弱类型的编程语言,声明变量的时候不用指明其类型,变量的类型由变量的值来决定,所以js的数据类型是直接针对变量的值的,数据类型限制了数据可以进行的操作,以及数据需要占用的存储空间。

JavaScript的数据类型一共有六种,又分为两类,分别为原始值和引用值:

JavaScript的原始值有五种,分别为Number数字类型,String字符串类型,Boolean布尔类型(是/否),Undefined未定义类型,Null空类型。

除了上述五种原始值以外的数据类型均属于引用值,也就是对象类型,数组,函数都属于对象类型。
在这里插入图片描述

栈内存和堆内存

原始值和引用值的存放空间是不一样的,原始值存放在栈(stack),引用值存放在堆(heap)

下面详细介绍这两种不同存放空间的区别
栈内存:
栈内存用来放原始值,先进去的东西最后出来
栈内存和栈内存之间的关系是拷贝,比如在栈里面给一个a=10,再让b=a,其内部原理是先把a拿出来,给a的值进行一份拷贝,再把拷贝的值赋予b,对a本身没有影响,后续修改a的值就是修改a的值,修改b的值就是修改b的,两者之间没有直接关系,互相不影响。

堆内存:
堆内存的存放规则,var arr=[1,2],声明一个引用值数组,内部存放原理是,还是先在栈内存的底部,创建一个arr的房间,就是正常的变量声明过程。然后系统发现该变量的值[1,2]是一个数组,是引用值,就会将[1,2]这个引用值放进heap堆里面存放,并且在栈内存里存进,存储[1,2]的栈内存的地址。
如果再声明一个arr1=arr,则还是先走栈内存赋值流程,把arr里存放的[1,2]数组的heap的地址拿出来,复制一份地址,把复制的地址送给arr1,这样arr1和arr都指向[1,2]的heap地址,修改heap内存中的[1,2]
如给[1,2]里面额外push一个3,会导致arr1和arr的内存都随之改变为[1,2,3]

但是如果是

var arr=[1,2]
var arr1=arr;
arr=[1,3];

这时的arr1的值还是为[1,2],而没有随着arr的改变变成1,3。为什么呢,因为让arr=[1,3]等于在堆内存heap中存入了一个新的[1,3],并用指针从原本的arr与[1,2]相连改为与[1,3]相连。同时栈stack里存放的heap地址也会改成新的[1,3]的heap地址。

引用值和原始值的不同是赋值形式的不同,原始值的特点,不可改变的原始值,房间里放入了值就不可以改变。还有一个内部机制,var a=100,a=200,a的值发生改变的时候,并不是在原有储存a=100的房间中直接修改a的值,而是新启用一个空间,在空间中存入200的值,并且给这个空间贴上变量a,最后再把原先a=100的空间注销掉,变成一个野房间。

JavaScript运算符,逻辑运算符

加号+ :字符串+字符串=字符串连接 任何数据类型+字符串=字符串
摩尔% :取余数
++:等于a+=1 在自身原有基础上加一
- - :等于a-=1 在自身原有基础上上减一

赋值顺序,从右向左,计算的顺序,自左向右,如果有括号的话,和数学一样优先运算。

比较运算符

大于等于小于 字符串比较的是ASCII码
在这里插入图片描述

逻辑运算符

&&:与
||:或
!:非

与运算符 &&:
与运算符会先看符号左边的表达式是否为True,除了下列为False以外,其他的值都为True
undefined,null,NaN,"",false,0这些为false,除了这些都是True

先看第一表达式转换为布尔值的结果,如果第一个表达式为假,直接返回第一个表达式的值,如果为真,会看第二个表达式转换为布尔值的结果。
如果只有两个表达式,就只看到第二个表达式,返回第二个表达式的值。也就是说,只有两个表达式,第一个表达式为真,不管后面第二个表达式的真假,都返回第二个表达式的值
更多的表达式也是一样的,按照这个规则,只要为真就往后看,是假的就返回

与运算符,可以当短路语句使用,data && document.write,data有意义的时候才会执行

或运算符 ||:
还是看布尔值,只要布尔值为真就返回,如果所有都为假,返回最后一个假的的值。

非运算符 !:
转换为布尔值取反,如果是!!的话,则取反再取反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值