js里的数据类型及语法规则

补充:除高级语言,其他语言都是低级语言(机器语言,汇编语言)

浏览器分两种:渲染引擎.JS引擎  V8(node.js基于v8,所以运行非常快)

 

Js基础语法

 

  1. 在js里是区分大小写的
  2. 标识符:指变量,数组,函数等名字.定义标识其实就是取名字的过程.

硬性要求:指必需要满足的,否则无法通过编译

可不满足

硬性要求内容:

1.由数字,字母和下划线,以及$组成,但不能以数字开头,禁止使用ES里面的关键字和保留字(其实就是ES里内置的标识符).

2.区分大小写

 

软性要求内容:望文知意

 

命名法则

驼峰命名法:驼峰命名法分两种,大写是大驼峰(帕斯卡命名法),第一个单词首字母小写是小驼峰.

 

匈牙利命名法:就是以一个或者多个单词组成.前面还会加上一个固定的前缀.这个固定的前缀就表明该变量的类型.

a_Li

 

蛇形命名法:指单词之间,以下划线进行分割

user_name

这种命名法,一般常见Linux内核,C++保存库,Ruby里常见.

 

关于ES里面的注释

两种:

单行://

多行:/**/

 

严格模式

 

从ES5开始引进的一种模式,更加的严格,减少歧义,解析更快,可作为下一个版本的参照.

 

如何进入严格模式?

“use  strict” defined    使用/严格/未定义

 

Js语句

  1. 和多数编程语言一样,每个语句以分号结尾,可以不写,但是考虑到后期压缩,所以建议养成书写分号的习惯.
  2. 关键字和保留字

关键字:指ES里定义好了的标识符,我们自己命名的时候,就不能再使用这些关键字:else if break

保留字:所谓保留字,指该版本更新后可能会被变成关键字的字

变量

就是储存在里面的数据随时可以变化的.

使用变量前先声明,3个关键字:var let const

Var 是ES6之前声明使用的.

Let 和const 是ES6开始新增的

声明变量的语法:

关键字  变量名

Var          i    

(没赋值,默认为undefined)

 

变量的声明和复制是可以同时进行的,如果是第一次给变量赋值,那么这个过程叫做变量的初始化.

Var   i=5;

可一次性声明多个变量

在声明变量的时候只能进行赋值操作,不能进行其他运算,比如+=.

 

  1. var 支持重复声明    如:i=5  i=10
  2. 先声明,再定义未赋值,未赋值的会被忽略
  3. 支持遗漏    没有声明,直接赋值

 

由于JS是一门解释性语言(动态语言),所以声明好的变量可以存储任意类型。

 

Let,不支持以上1.2.3声明特性

 

特点:

1.变量提升(重要)

之所以现在不推荐使用以var来声明变量,是因为var声明有一个变量提升。所谓变量提升,就是指将变量的声明提升至当前作用域的顶部。

Console.log(i);

Var i=10;

 

Var i;

Console.log(i);

i=10;

 

Let声明的变量不存在变量提升,会直接报错。

 

第二个区别:

Var声明的变量不存在块级作用域,在其他语言(静态)里面,通过一对{}可以定义块级作用域。

 

Let声明存在块级作用域

 

常量:指不变的量

Const:也是声明变量的一种方式,但是声明的变量不能够再改变。

 

 

Js里数据类型发分类(***)

两大类:

基本数据类型(原始值,简单值)

引用数据类型(复杂值)

 

简单值:指最简单 数据段,不可以再拆分,常见的简单值:let  i=5

复杂值:复杂值是指由多个简单值构成的数据,是可以拆分的。

常见的复杂值:let  arr=[1,“hello”]

Arr是数组名,是一个地址

 

简单值存储于栈区,复杂值存储于堆区。

 

长条长条  i=5   arr       椭圆 :   [ ......]

 

 

因为原始数据(简单值)所占的大小空间是固定的,所以存储于栈区。而引用类型数据,大小不固定,所以无法在栈区开辟合适的空间。所以引用类型的数据存储在堆区。

 

数据复制时候的区别:

如果是简单值,那么我们复制的时候,复制的是值的拷贝。如果是引用类型,则复制的是地址。

 

关于简单值和复杂值的比较:

如果是简单值,那么进行比较的是值,也就是该值相等就是两个变量相等。如果是引用类型,那么比较的是地址。

 

 

数据类型

在ES5的时候,基本数据类型有5个:undefined、null、number、boolean、string  ES6开始,变成6个,增减symbol

 

Undefined:只有一个值,undefined

已声明未赋值的时候,(typeof  i)

没有声明,直接报错

 

Null 数据类型

只有一个:null,代表空,undefined可以说是null衍生而来。

Null==undefined    true

 

Boolran 数据类型

True  false

严格区分大小写

 

任何数据类型都可以转为布尔类型

 

Number  任何非0的数字都会转为true   0为false

String  任何非空的字符串都会转为true,包括引号里的空格或者是0       空字符串为false

在一个boolean函数,可把其它数据类型转为bool值

 

以下9个值会被转化成布尔类型 false

“”‘’``字符串模板  0和-0  NaN   false  null undefined

 

Number数据类型

 

数字一般我们可以分为整数和实数

 

整数:又可以分为正整数和负整数

 

关于整数,拥有不同的进制。不同的进制,前面需要添加不同的特殊符号

二进制:0b

八进制:0、0o

十六进制:0x

用来计算时,都是会转化为10进制

 

实数:其实就是小数

2种表示方法:小数型(3.14)、指数型:3.14e2 (10的2次方),3.14e-2 (10的负2次方)

 

最大值和最小值:

MIN-VALUE  MAX-VALUE 可以查看ES里支持的最大值和最小值

Console.log(number.MAX-VALUE)

 

有无穷的概念,分为正无穷和负无穷

正:infinity    (Math.pow(2,1024))

负:-infinity   (-Math.pow(2,1024))

 

NaN 全称为not a number  意思这不是一个数,这个东西就是一个标识:代表这个变量是一个非数。

1.打印时分类为number类型

2.设计到任何类型的计算,都会返回NaN

3.NaN不和任何值相等,包括自己

 

 

 

 

 

 

 

在ES里面有一个专门用来判断是否为非数的函数:isNaN

()  是数字就是false,不是就是true

 

数值转化相关函数:Number()  parseInt()  parseFloat()

 

Number():将一个变量转为数值

如果是布尔值,转换为0和1

如果是null,转为0

如果是undefined 转为NaN

Var i;

I+=2;

Console.log(i);//NaN

 

关于字符串使用number()转换规则:

如果是十进制的纯数字,就是十进制

如果是八进制,会舍弃前面的0;//用0o

如果是是十六进制和二进制,那么会正常的转为十进制

 

如果不是纯数字,里面有字母,那么会转为NaN

如果是空字符串,转为0

 

 

parseInt():也是将一个变量转换为整数。和number()有一个最大的区别,在转换时会转换为数字。

必须以数字开头,(“123abc”)

parseInt(null //NaN

parseInt(undefined  //NaN

 

parseInt()接收第二个数,表明前面是多少进制

(parseInt(“12,8”)) 表示8进制

 

parseFloat():转换为小数,和parseInt()一样,会尽可能去保留书  3.14.15.67   3.14

 

在ES6之前,number(),parseInt()、parseFloat()是基于全局对象的方法,但是用ES6开始,上面方法以及被归类到Number对象。

 

 

String数据类型

 

代表的是字符串,在js里,单双引号,没有任何区别

如果字符串外双,内单,反之亦然,一定要加斜杠,可以使用转义字符,反斜杠

 

可以将其他数据类型转为字符串类型的函数:toString()  String()

 

toString() 除了null和undefined,都能转为字符串类型

String()可以传唤任意类型

1. i.toString() typeof  i.toString()

2. toString(null typeof  String(null

toString()可以传一个参数,表示几进制

 

字符串类型非常霸道,和其他数据类型相加,得到字符串。

 

ES6新添加了字符串模版

使用的是两个反引号``

第一个特点:支持多行文本

第二:可以进行变量的解析,需要将变量名放到${ }中

 

typeof:返回一个变量的数据类型

 

NaN返回number

infinity返回number

Null  返回object 对象

undefined 返回   undefined

 

 类型转换:分为两种

 

隐式转换:指系统内部自动发生的转换,一般发生于不同数据类型运算的时候。

2+undefined //number

2+null    //2

“2”+NaN  //2 NaN

 

显示转换:就是我们程序员强制进行数据类型转换

 

转布尔:Boolean()

转数字:Number()  ParseInt()   ParseFloat()

转字符串:toString() String()

 

数据转换的快捷方法:

 

转布尔值:只需要在变量前面加两个!!,可转为当前类型符合的布尔值。

!!true

!!false

 

转数字:直接*1或者/1

 

null*1 //0,number

undefined/1 //NaNnumber

 

转字符串:和空字符串相加

 

运算符

 

一元运算符:作用于一个操作数

需要常操作的就是++和 - -   

++a  先自增再运算

a++先运算再自增

 

ps:尽量降低++、- - 放一行,减少差异性

 

逻辑运算符 :与

 

非。! 取反

与。&&  真真为真 否则为假  在ES里不仅返回真假,如果里面讲个操作数为真,会返回第二个操作数

短路现象:当第一个操作数为假的时候,那么就不会去判断第二个数,因为结果已经是假了。

特殊现象:console.log(null&&NaN)//null

5&&NaN //NaN

5&&null//null

||     或里面有一个为真,就返回真

同样有短路现象

 

算数运算符

 

算术:加法、减法、乘法、除法、取余、指数运算(ES6新增)

Ps:js里证书相除能得到小数

 

指数:(Math.pow(2,3));

          (2**3);

 

关系运算符

 

大于、小于、大于等于、小于等于、相等、不相等、全等、不全等

 

字母也可以比较大小,比较的是ascll码对应的字符编码

A:97 b:98

 

如果是字符和数字进行比较,分为两种情况

首先将隐式转为数字进行比较,如果不能,那就回转为false

 

相等和全等

 

==只要值相同,不管数据类型

=== 数据类型和值都相同

 

特殊情况:

null==undefined //true

null===undefined //false

NaN===NaN //false

 

赋值运算符

 

除了=以为,还有一组复合赋值运算符:+=  -=  /=  *=

 

三目运算符

语法:表达式?表达式2:表达式3;

 

逗号运算符

一般用于一条语句执行,多个运算符操作

Let i=(1,2,3,4,5)

i=5

 

let i=1 ,a=2;

 

运算符分优先级,可以用()提升优先级。

 

 

转载于:https://www.cnblogs.com/opacity-m/p/7967926.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值