(一)js发展和简介
1.js和Java
- JavaScript是一种运行在客户端 的弱类型脚本语言 ,是一种解释性动态类型的基于对象的语言。
执行过程:一边解释一边执行 - Java是服务端的编程语言,强类型语言。
执行过程:x.java-先编译产生x.class(字节码文件)-在执行字节码文件。
2.使用
-
应用场景:node.js、APP、puff(物联网)、游戏开发等等。
-
执行:JavaScript 不仅仅是在浏览器内执行,也可以在服务端执行,甚至还能在任意搭载了 JavaScript 引擎 的设备中都可以执行。
浏览器中嵌入了 JavaScript 引擎,有时也称作 JavaScript 虚拟机。 -
不同的引擎有不同的“代号”,例如:
V8 – Chrome 和 Opera 中的 JavaScript 引擎。
SpiderMonkey – Firefox 中的 JavaScript 引擎。
还有其他一些代号,像“Trident”,“Chakra”用于不同版本的 IE,“ChakraCore”用于 Microsoft Edge,“Nitro”和“SquirrelFish”用于 Safari 等等。
上面这些名称很容易记忆,因为经常出现在网上开发者的文章中。我们也会用到这些名称。例如:某个新的功能,如果 JavaScript 引擎 V8 是支持的,那么我们可以认为这个功能大概能在 Chrome 和 Opera 中正常运行。 -
引擎是如何工作的?引擎很复杂,但是基本原理很简单。引擎(通常嵌入在浏览器中)读取(“解析”)脚本。然后将脚本转化(“编译”)为机器语言。然后这机器语言代码快速地运行。引擎会对流程中的每个阶段都进行优化。它甚至可以在运行时监视编译的脚本,分析数据流并根据这些对机器代码应用优化。最后,脚本会执行地非常快。
3.组成
4.书写 -
外部脚本:简单的可以直接写在HTML合适的位置,复杂的写在文件中,使用独立文件。优点:浏览器会下载它,然后将它保存在浏览器的缓存中。之后,浏览器需要相同的脚本就可以从缓存中获取,而不是下载它。则文件实际上下载一次,可节省流量,加载更快。
对于写了src的script标签将不能在其中书写脚本语言,因为这种会忽略内布包裹代码,不能写在一起。
<script src="js/search.js"></script>
代码结构是可以省略分号的,但是最好不要这样做。
5.变量和常量
- var和let区别:
1.let声明的变量只在其声明的块或子块中可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数function varTest() { var x = 1; if (true) { var x = 2; // 同样的变量! console.log(x); // 2 } console.log(x); // 2 } function letTest() { let x = 1; if (true) { let x = 2; // 不同的变量 console.log(x); // 2
2.在程序或者函数的顶层,let并不会像var一样在全局对象上创造一个属性,比如:
var x = 'global'; let y = 'global'; console.log(this.x); // "global" console.log(this.y); // undefined
3.let 被创建在包含该声明的(块)作用域顶部,一般被称为“提升”。与通过 var 声明的有初始化值 undefined 的变量不同,通过 let 声明的变量直到它们的定义被执行时才初始化。在变量初始化前访问该变量会导致 ReferenceError。该变量处在一个自块顶部到初始化处理的“暂存死区”中。
function do_something() { console.log(bar); // undefined console.log(foo); // ReferenceError var bar = 1; let foo = 2; }
4.let不允许在相同作用域内,重复声明同一个变量。否则报错。
5.let非常适合用于 for循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。for (var i = 0; i <10; i++) { setTimeout(function() { console.log(i); }, 0); }//输出10 for (let i = 0; i < 10; i++) { setTimeout(function() { console.log(i); // i 是循环体内局部作用域,不受外界影响。 }, 0); }//输出0 1 2 3 4 5 6 7 8 9
具体参考网址(如有侵权立即删除 https://www.cnblogs.com/fly_dragon/p/8669057.html
常量:
cont无法被二次修改。
命名:尽量驼峰式,规范命名。6.数据类型
-
数据类型: 7 种原始类型:Boolean Null Undefined Number BigInt String Symbol 和 Object。(具体情况可以去w3cschool查看)
BigInt -任意精度整数。(这个才知道添加了)V8引擎v6.7 默认启用对 BigInt 的支持。
Number是双精度浮点数,它可以表示的最大安全范围是正负9007199254740991,也就是2的53次方减一,现在比9007199254740992大的所有数字可以使用BigInt表达。
语法:
BigInt(value) || 数字后面加n;
可以是字符串或者整数,注意, BigInt()不是构造函数,因此不能使用new操作符。10n === BigInt(10); // true 10n == 10; // true
symbol 用于唯一的标识符。
typeof 运算符可以查看变量的类型。
两种形式:typeof x 或者 typeof(x)。
返回的类型的字符串,比如 “string”。
null 返回 “object” —— 这是语言中的一个错误,实际上它并不是一个对象 -
类型转换
转换成字符串类型: num=num+"" 、ToString()、String()、input输入框得到的值都是字符串string类型;
转换成数值类型: Number()、parseInt()-(这个会存在取整情况,不四舍五入)、parseFloat()–转换成浮点类型、使用加减0运算会转换成数值。
使用isNuN()可以判断是否为数字,true为非数值,false为数值。 -
运算符(主要识别i++和++i)
如果发现错误请及时告知谢谢!