js的特点
js的特点
- 解释性语言 ==》不需要编译代码,可以跨平台,像php,js,jsp都是解释性语言
- 单线程 ==》 同一时间只能执行一件事情(js引擎是单线程的--
eventLoop
) - ECMA标准 ==》为了统一js的规则,推出
ECMA
标准,因为也成为 ECMAScript - '双精度’格式(即64位二进制),遵循
IEEE754
规范 解释性
/轻量级
/跨平台
(与操作系统无关) /动态
(运行时才知道变量类型) /弱类型
(较为灵活,隐式类型转换) 的脚本语言- 运行在客户端浏览器上
解释性语言和编译性语言的区别
解释性语言:
a.读一行,执行一行
b.优点:跨平台
c.缺点:与编译性语言相比稍微慢点
d.代表:JS,php,jsp
编译性语言:
a.通篇翻译后,生成翻译文件,执行翻译后的文件
b.优点:快,常用于开发游戏操作系统
c.缺点:移植性不好,不跨平台
d.代表:C语言,C++
e.通常都是强类型语言
js的组成及引入
js的组成
ECMAscript ==》 ECMAscript语法
DOM ==》 文档对象模型,操作DOM元素
BOM ==》 浏览器对象模型,与浏览器窗口进行互动
js的引入
行内引入:行内引入方式必须结合事件
来使用
<a href="javascript:alert('行内引入')">行内引入</a>
// 扩展:行内阻止a标签跳转的默认事件
1. <a href="javascript:;">aa</a>
2. <a href="javascript:void(false);">aa</a>
// viod(0);相当于 return false;
内部引入:在 head 或 body 中,定义script标签
<script>
alert('内部引入')
</script>
外部引入:(w3c规范
)
<script type='text/javascript' src='demo.js'></script>
/*
* 外部引入js的好处
* 1.维护性高
* 2.可缓存(加载一次,无需再加载)
* 3.方便扩展,复用性高
*/
js变量
变量声明过程
- js是一种弱类型语言,任何类型变量都可以通过 var 声明
- 先声明,后赋值
<script type='text/javascript'>
var arr =[1,2,3];
第一步:变量声明
==>向系统申请一个存储空间,将这个空间命名为 arr
第二部:变量赋值
==>将数组 [1,2,3] 赋值给 arr
</script>
// 扩展:由 var,let,const 声明的变量属于 不可配置属性
var a = 1
delete a // false
变量命名规则
1.变量名必须以英文字母
、 _
、$
开头,不能以数字开头
2.变量名可以包括英文字母、 _ 、数字,不能用中文
3.不可以用系统关键字
、保留字
作为变量名
4.语义化,命名尽量有意义
5.小驼峰
,首个字母小写,后面单词字母大写
js中的关键字集合==> 图解
js中保留字集合==>图解
js的数据类型
值的类型 ==》决定数据类型
五大不可改变的原始值(栈数据)
Number 数字类型
String 字符类型
Boolean 布尔类型
undefined 未定义的值
null 占位符
Number
,String
,Boolean
,undefined
,null
,Symbol
,BigInt
undefined:
1. 变量被声明了,但没有赋值时,就等于undefined。
2. 调用函数时,应该提供的参数没有提供,该参数等于undefined。
3. 对象没有赋值的属性,该属性的值为undefined。
4. 函数没有返回值时,默认返回undefined
null
:虽然typeof null
会输出"object"
,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object 。Symbol
代表独一无二的值,最大的用法是用来定义对象的唯一属性名,ES6新增的数据类型。BigInt
:Javascript 中的任意精度整数,可以安全存储和操作大整数。即使超出 Number 能够表示的安全整数范围,ES6新增的数据类型。
// BigInt 的使用方式
// 方式1:要创建BigInt,只需要在数字末尾追加 n 即可
console.log( 9007199254740995n ); // → 9007199254740995n
console.log( 9007199254740995 ); // → 9007199254740996
// 方式2:用BigInt()构造函数
BigInt("9007199254740995"); // → 9007199254740995n
// 简单使用
10n + 20n; // → 30n
10n - 20n; // → -10n
const x = 10n;
++x; // → 11n
--x; // → 9n
console.log(typeof x); //"bigint"
// 值得警惕的点
// 1.不支持一元加号运算符
10 + 10n; // → TypeError
// 2.不能将BigInt传递给Web api和内置的 JS 函数
Math.max(2n, 4n, 6n); // → TypeError
// 3.元素都为BigInt的数组可以进行sort
let arr = [1n,3n,2n]
arr.sort(); // → [1n, 2n, 3n]
// 4.当 Boolean 类型与 BigInt 类型相遇时
Boolean(1n); // → true
Boolean(0n); // → false
// 5.BigInt可以正常地进行位运算,如|、&、<<、>>和^
10n & 2n ; // → 2n
// 6.兼容性 不兼容IE
基本数据类型由于结构相对简单,直接把创建的值存储到栈内存
中
let a = 26
/*
* 1.创建一个值(基本类型直接存储在栈内存中即可)
* 2.创建一个变量a,把其存储到 VO(GLOBAL) 中
* 3.让创建的变量a和创建值12关联在一起 ==》赋值操作
*/
引用值 object (堆数据)
Object 普通对象
Array 数组对象
Function 函数对象
Date 日期对象
RegExp 正则对象
引用数据类型的结构相对复杂(一个综合体,包含很多值),需要单独开辟堆内存
存储
let n = {a : 1, b : 2}
/*
* 1.创建值
* 1.1 开辟一个堆内存(Heap),每一个堆内存都有一个16进制的地址
* 1.2 把对象中的键值对分别存储到堆内存中
* 1.3 把堆内存的地址放在栈内存中,用来供变量的引用
* 2.创建一个变量
* 3.让变量和之前创建堆内存的地址进行关联
*/