1.学习方式
Linux环境下
编辑器 vi
执行环境 nodejs
2.JavaScript介绍
1)js在浏览器中运行,进行表单验证,页面的局部更新(dom操作)
对浏览器的操作(bom操作)
2)js解释器:IE,网景推出的浏览器
浏览器具有js解释器:由于js解释器不统一,js标准不一样,存在兼容性问题
3)js是解释型语言,无需编译,直接运行在解释器上
而Java/c属于编译型语言,需要进行编译后,java–>.class 再运行到jvm .c–>.out再运行到linux
3.传统js构成
1)ECMAScript5 JavaScript标准
语法:变量、关键字、保留字、表达式、流程控制语句、对象、函数、数组…
2)DOM:Document Object Model 文档对象模型,浏览器厂商通过es5编写的控制html/css的代码
document.getElementById();
dom.addEventListener()
dom.attachEvent()
3)BOM:Browser Object Model 浏览器对象模型,浏览器厂商通过es5编写的控制浏览器的代码
alert();
setTimeout(function(){
//
},1000)
XMLHttpRequest(ajax)
android/ios
移动互联,前端的发展,android + H5,JS
nodejs,google将浏览器中的JS解释器给掏出来。可以安装在任意的服务器端,并且nodejs中提供了大量的基础库,file、http,这个时候js具备服务器端能力
在nodejs中,不存在兼容性问题,因为nodejs中压根没有dom/bom,因此,切记不要在nodejs中执行任何dom和bom代码。由于不存在兼容性问题,nodejs是可以大量发挥js高级标准,ES6语法一般在nodejs中可以完全运行
4.hello world
1)在nodejs中
1.通过vi编辑(es5)
2.通过nodejs来执行
2)在浏览器
1.通过vscode编辑(es5、dom、bom)
1)html
2)
一般script标签位于body之前
2.通过浏览器来执行
5.注释
html:
css:/**/
js://单行注释
/多行注释/
6.关键字和保留字
7.变量
1)js是弱类型语言
特点:1.变量的数据类型在初始化的时候确定
2.变量的数据类型可以随时发生改变
3.类型细分不明显
2)var
1.变量可以重复声明
var a = 3;
var a = “hello world”
2.变量声明会被提升(函数声明也会被提升)
console.log(a);
var a = 3;
3.var声明的变量没有局部作用域
function foo(){
if(true){
var a = 3;
console.log(“inner”,a);
}
console.log(“outer”,a);
}
foo();
8.数据类型
1)分类
1.基本数据类型
变量的值是保存在栈区
Number
var a = 2;
var a = 2.1;
var a = 0X10;
var a = 010;
typeof a; 'number'
string
var a = "hello world"
var a = 'hello world'
var a = `
<ul>
<li>terry</li>
<li>tom</li>
<li>larry</li>
</ul>
`;
json字符串-对象
var json = '{"name":"terry","age":12}'
Boolean
var a = true;
var a = false;
Null
var a = null;
Undefined
var a;
var a = undefined;
2.引用数据类型(指针)
变量的引用地址保存在栈区,真正的值保存在堆区
除了基本数据类型之外的所有其他数据类型被称为引用数据类型
var a = {name:"terry",age:12}
var a = [1,2,3,4,5,6,7]
var a = function(){}
var a = /[abc]def/i
2)类型检测
typeof a
3)深拷贝和浅拷贝
var a = {name:"terry",age:12}
//浅拷贝【地址拷贝】
var b = a;
b.age++;
console.log(a.age);
//深拷贝【克隆】
1.json对象->json->对象
2.Object.assign({},a)
3.lodash
var a = 3;
var b = a;
b++;
console.log(a);
4)其它
1.NaN
not a number
var result = 10/'a' //NaN
console.log(isNaN(result)); //true
2.Infinity\-Infinity
无穷大
var result = 10/0; //Infinity
var result = -10/0; //-Infinity
console.log(isFinite(result)); //false