javascript里的基础语法数据类型以及类型转换
Posted opacity-m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript里的基础语法数据类型以及类型转换相关的知识,希望对你有一定的参考价值。
Js基础语法
- 在js里是区分大小写的
- 标识符:指变量,数组,函数等名字.定义标识其实就是取名字的过程.
硬性要求:指必需要满足的,否则无法通过编译
可不满足
硬性要求内容:
1.由数字,字母和下划线,以及$组成,但不能以数字开头,禁止使用ES里面的关键字和保留字(其实就是ES里内置的标识符).
2.区分大小写
软性要求内容:望文知意
命名法则
驼峰命名法:驼峰命名法分两种,大写是大驼峰(帕斯卡命名法),第一个单词首字母小写是小驼峰.
匈牙利命名法:就是以一个或者多个单词组成.前面还会加上一个固定的前缀.这个固定的前缀就表明该变量的类型.
a_Li
蛇形命名法:指单词之间,以下划线进行分割
user_name
这种命名法,一般常见Linux内核,C++保存库,Ruby里常见.
关于ES里面的注释
两种:
单行://
多行:/**/
严格模式
从ES5开始引进的一种模式,更加的严格,减少歧义,解析更快,可作为下一个版本的参照.
如何进入严格模式?
“use strict” defined 使用/严格/未定义
Js语句
- 和多数编程语言一样,每个语句以分号结尾,可以不写,但是考虑到后期压缩,所以建议养成书写分号的习惯.
- 关键字和保留字
关键字:指ES里定义好了的标识符,我们自己命名的时候,就不能再使用这些关键字:else if break
保留字:所谓保留字,指该版本更新后可能会被变成关键字的字
变量
就是储存在里面的数据随时可以变化的.
使用变量前先声明,3个关键字:var let const
Var 是ES6之前声明使用的.
Let 和const 是ES6开始新增的
声明变量的语法:
关键字 变量名
Var i
(没赋值,默认为undefined)
变量的声明和复制是可以同时进行的,如果是第一次给变量赋值,那么这个过程叫做变量的初始化.
Var i=5;
可一次性声明多个变量
在声明变量的时候只能进行赋值操作,不能进行其他运算,比如+=.
- var 支持重复声明 如:i=5 i=10
- 先声明,再定义未赋值,未赋值的会被忽略
- 支持遗漏 没有声明,直接赋值
由于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 //NaN,number
转字符串:和空字符串相加
运算符
一元运算符:作用于一个操作数
需要常操作的就是++和 - -
++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;
运算符分优先级,可以用()提升优先级。
以上是关于javascript里的基础语法数据类型以及类型转换的主要内容,如果未能解决你的问题,请参考以下文章
Python 基础 2022 最新第二课 变量 & 数据类型