1.JS的概念
JavaScript 是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:
ECMAScript;
文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
浏览器对象模型(BOM),提供与浏览器交互的方法和接口。
2.在HTML中使用JS
<script>元素:引入JS的主要办法,有以下6个属性
1.async:立即下载脚本,但不妨碍其他操作,比如下载其他资源或脚本。只对外部脚本文件有效,多个异步脚本顺序不
3.基本概念
3.1语法
1.区分大小写
2.标识符:指变量、函数、属性的名字,第一个字符必须是一个字母、下划线或一个美元符号
3.注释:单行和块级(企业级应用中用的比较多)
4.严格模式(举几个例子):
a.严格模式的保留字更多
b.未声明的变量调用delete
5.语句:分号结尾,单行if也最好使用代码块
3.2数据类型
基本数据类型:Number,String,Boolean,Null,Undefined,Symbol
存放于栈中,数据大小确定,内存空间大小可以分配,直接按值访问
引用数据类型:Object (Array,fun,正则等)
存放于堆中,每个空间大小不一样,在栈中保存一个指针,指向堆内存
1.Undefined:typeof为undefined,实际情况:变量未声明、变量未初始化
2.Null:typeof为object(因为null表示一个空对象指针),所以变量准备用于保存对象时,初始化为null
3.Boolean:typeof为boolean,空字符串、0和NaN、null、undefined在布尔转化的时候为false
4.Number:typeof为number
基本值是十进制,还可以是8进制:0开头,后跟(0~7)、16进制:0x开头,后跟(0~9及A~F),计算时都转为十进制)
浮点数的保存内存是整数的两倍
NaN:不等于任何值,isNaN()在接收到一个值之后,会尝试将这个值转换为数值。
5.String:typeof为string,表示由零或多个 16 位 Unicode 字符组成的字符序列,字符串一单创建,不能改变,变量改变字符串其实是销毁原先的,创建一个新的填充该变量
6.Object:typeof为object,
3.3操作符
1.一元操作符:
a.递增递减的前置后置区别
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; // 等于 21
var num4 = num1-- + num2; // 等于 21
console.log(num) //等于0
2.位操作符:最底层执行操作,将js 64位值转32位(二进制)值进行操作,有操作符如下
非(~):var num=25; ~25 //-26
与(&):var num=25 & 3; //1 25和3的二进制编码上只有第一位同时为1,所以值为1
或(|):var num=25 & 3; //27 25和3的二进制编码上只要有一位为1,值的相应位置为1,所以等于27
异或(^):var num=25 & 3; //26 25和3的二进制编码上只有一位为1,值的相应位置为1,所以等于26
左移(<<):var num = 2 << 5; //64 等于二进制的 1000000,值的二进制编码向左移5位,右侧空缺由0补齐
右移(>>):var num = 64 >> 5; //2 值的二进制编码向右移5位,空缺由符号位值补齐
无符号右移(>>>):var num = 64 >> 5; //2 正数时无影响,负数时前面由0补齐
3.布尔操作符:
逻辑非(!):!!1 //true
逻辑与(&&):第一个为true,继续向后,知道遇到false,都是true则返回true
逻辑或(||):遇true停止返回true,否则继续向后,都是false则返回false
4.乘性操作符:
乘法:NaN乘任意为NaN;Infinity乘0为NaN;Infinity 与非 0 或Infinity相乘是 Infinity 或-Infinity
除法:结果是 NaN:除以0,有一个操作数是 NaN, Infinity 除以 Infinity ;
结果是 Infinity 或 -Infinity :0除以非零的有限数,值超过表示范围,Infinity 被任何非零数值除
求模(余数):结果是 NaN:被除数是无穷大值,除数是0
其他:除数是无穷大值,结果是被除数;
5.加性操作符:
Infinity + Infinity=Infinity;
Infinity - Infinity=NaN;
+0-0=+0; -0-0=-0;
加法:只要有一个操作数是字符串,则另一个转字符串,两者拼接
减法:如果有一个操作数是非number,先用Number()或valueOf()转再计算
6.关系操作符:
只要有一个操作符是数值,则都转为数值比较
两个都是字符串,比字符编码值
布尔转为数值比,对象valueOf值比
7.相等操作符:
相等操作符:先转换再比较,转化规则:
1.有一个是boolean,则先转为数值
2.字符+数值,字符转数值
3.一个是对象的,对象调用valueOf(),再按前面规则比较
4.null和undefined相等,且比较的时候不能转换成其他值
5.一个是NaN,则无论如何都不相等
6.两个都是对象,比较是不是指向同一对象,是则true
全等操作符:不转化
8.条件操作符:var test=true ? 1 : 2;
9.赋值操作符:赋值
10.逗号操作符:常见用于声明多个变量
3.4语句
1.if:if(){}
2.do-while:do{}while(),先执行do,再while判断
3.while:while(){},先判断再执行
4.for循环:for(初始化;判断表达式;循环后执行表达式){}
5.for-in:for(property in expression){} 枚举对象内的属性
6.label语句:给代码添加一个标签以便将来使用(一般都被break或continue语句引用)
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost; //退出当前循环的同时也退出outermost循环(即外层这个循环)
}
num++;
}
}
如果是continue outermost,则是退出当前,执行utermost循环(即外层这个循环)
7.break和continue语句:break退出,continue退出当前,执行下一个
8.with:with(obj){},with关联了一个对象,代码块内的变量如果找不到,会查询关联对象是否有同名属性。严格模式错误
9.switch
4.变量、作用域及内存问题
4.1基本类型和引用类型
1.引用类型在堆内存,基本数据类型在栈内存
2.所有函数的参数都是按值传递
3.检测:基本数据类型——typeof,引用类型的都是object,想知道具体可以用instanceof (obj instanceof Object)根据变量的原型链来识别,instanceof 会返回true或false.
4.2执行环境及作用域
建议看书理解,需要注意的是ES5没有块级作用域而ES6是有的。
5.引用类型
(介于是学习笔记,重在个人体验超过分享的意义,之后笔记会迁移到语雀)