文章目录
JS简介
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的 高级编程语言 。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
JS的组成部分
ECMAScript,描述了该语言的语法和基本对象。
文档对象模型(DOM),描述处理网页内容的方法和接口。
浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。
JS的基本特点
JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
- 是一种解释性脚本语言(代码不进行预编译)。
- 主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
- 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。
- 跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如windows,Linux,Mac,Android,IOS等)
- Javascript脚本语言同其它语言一样,有它自身的基本数据类型,表达式和算术符及程序的基本程序框架。Javascript提供了4种基本的数据类型和两种特殊数据类型用来处理数字和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。
- 可以实现web页面的人机交互。
JS的特性
JavaScript脚本语言具有以下特点:
- 脚本语言。 JavaScript是一种解释型的脚本语言,C、C++等语言先编译后执行,而JavaScript是在程序的运行过程中逐行进行解释。
- 基于对象。 JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。
- 简单。 JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。
- 动态性。 JavaScript是一种采用事件驱动的脚本语言,它不需要经过Web服务器就可以对用户的输入做出响应。在访问一个网页时,鼠标在网页中进行鼠标点击或上下移、窗口移动等操作JavaScript都可直接对这些事件给出相应的响应。
- 跨平台性。 JavaScript脚本语言不依赖于操作系统,仅需要浏览器的支持。因此一个JavaScript脚本在编写后可以带到任意机器上使用,前提上机器上的浏览器支 持JavaScript脚本语言,JavaScript已被大多数的浏览器所支持。
JS与HTML、CSS的对比
相同点: 三者运行环境都可以在浏览器中。
不同点: HTML、CSS 不叫编程语言,JS运行环境不只是浏览器,也可以是其他环境。
JS引入方式
- 在head中引入 JavaScript 函数
把<script>标签写在<head>标签中
- 在body中引入 JavaScript 函数
把<script>标签写在<head>标签中
- 引入外部的 JavaScript文件
把JS代码写在JS文件中,然后再html文件中通过<script>标签引入,写项目时通常会把JS写在一个单独的文件中,利用是src
JS基本语法
- JS区分大小写
- 忽略空白符(空格 换行 tab)
- 语句分号可加可不加
- 单行注释// 多行注释/* */
- 需要特别注意标识符和关键字
- 不能以数字开头
JS中的变量
变量是用于存储信息的“容器”,也就是内存中的一个空间。
- 变量名
内存空间的别名
注:
变量必须以字母开头,变量也能以$ 和_ 符号开头(不推荐)
区分大小写(y和Y是两个不同的变量)
- 全局变量和局部变量
全局变量与局部变量的分界点是函数,函数外部的是全部变量,内部的是局部变量。全局变量在函数内外都可以访问,局部变量只能在函数内部访问。 - 变量值
存储在内存空间里的值
数据类型
为了更加合理的使用内存空间,基本上所有的编程语言中都提出了数据类型的概念,研究针对不同的数据,分配不同的空间。
- 基本数据类型
(1)number: 数字型
- number是一个数据类型,这个数据类型对应的值有无数个。
- 在JS中number数据类型是不分整数和小数 都是number
- 可以通过typeof查看一个变量值的数据类型
- 最大值 和 最小值
- number可以通过不同进制显示 进制 10进制 2进制 16进制 8进制
- NaN Not a Number 不是一个数字
- JS中不要对小数运算
(2)String: 字符串类型 - 在JS中 使用‘’ “”把字符串包起来 不包 JS会给它当成变量
- 单引号不要嵌套单引号 双引号不要嵌套双引号 外单内双 外双内单
- string数据类型对应的数据有无数个
(3) boolean 布尔类型 - boolean数据类型对应的值就两个 true false
- true 和 True 不一样的 JS是区分大小写的
(4)undefiend 没有值 - undefiend是一个数据类型,这种数据类型对应的值是undefiend
出现undeined的原因:一个变量没有赋值 它的值是undefiend 这个值的类型是undefiend
引用数据类型
object 对象
array 数组
function 函数
JS的数据类型转换
隐式类型转化:静悄悄地,JS代码不知不觉地就进行了类型转化
强制类型转化:写代码进行转化
parseInt()//将非整数类型的转换为整数类型
parsefloat()//将非小数类型的转化为小数类型
等等
typeof 操作符
你可以使用 typeof 操作符来查看 JavaScript 变量的数据类型。
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
JS代码在执行时分两个阶段
- 预编译
把加var的变量进行提升 变量声明会提升 变量的赋值是不会提升
提升到了代码段最前面,把使用function声明的函数进行提升,提升的是整个函数声明 - 代码执行
从头到尾,代码一句一句的执行。
加var的变量和没有加var的变量的区别
<script>
// 1)在全局代码中,加var会提升,没有var的不会提升。
console.log(a);
a = 110; // a is not defined
// 2)不管加没加var的全局变量,都会作为window的属性
var a = 1;
b = 2;
console.log(window.a)
console.log(window.b)
// 3)没有加var的变量,只能作为全局变量,只要是全局变量,肯定是window的属性
function f() {
a = 666;
}
f()
console.log(window.a)
// 4)加var的局部变量,不会作为window的属性
function f() {
var a = 666;
}
f()
console.log(a)
访问一个对象上不存在的属性,结果就是und
console.log(window.a) // undefined
</script>
初步了解执行上下文( 给代码提供数据)
代码分两类:
全局代码 函数外面的代码叫全局代码
函数代码 一个函数就是一个局部代码
全局执行上下文:
全局代码在执行时时,就会产生全局的EC。 EG(G)
局部执行上下文:
函数代码在执行时,就会产生局部的EC。调用一个函数就产生一个EC,调用100个函数,就产生100个EC。
EC栈:
栈:杯子
每产生一个EC就会放到杯子中,通俗的说就是杯子中放鸡蛋。
栈:先放进去的后出来
初步了解函数
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
函数定义= 声明 + 赋值
函数就是包裹在花括号中的代码块,前面使用了关键词 function:
注意:调用函数时,就会把函数体中的代码都执行了,函数调用的过程就是实参向形参赋值的过程,一个函数没有返回值,返回的类型就是undefined。
声名变量和常量
用法:声明变量用let,声明常量用const。