输出语句(Hello World)
JS代码需要编写到script中
<script>
alert("1") //弹出网页警告框1
console.log("2") //在控制台打印2
document.write("3") //在网页中显示3
</script>
js编写位置
可以将js编写外部的js文件中,然后通过script标签进行引入
<script src="./script/script.js"></script>
可以将js代码编写到指定标签属性中
<button onclick="alert('你点我干嘛')">点我一下</button> //点击按钮弹出警告框
<a href="javascript:alert(123);">超链接</a> //点击超链接弹出警告框
<a href="javascript:;">超链接</a> //点击超链接什么也不会发生
JS严格区分大小写
alert(123)//执行
Alert(123)//不执行
在JS中多个空格和换行会被忽略
可以利用这个特点来对代码进行格式化
JS中每条语句都应该以分号结尾
JS中的具有自动添加分号的机制,所以如果不写分号解释器会自动添加
字面量
字面量其实就是一个值,它所代表的含义就是它字面的意思,没什么特殊的含义,写什么就表示什么 1就是就表示数字1不是1个1条或者其他的东西
"hello"就表示hello true表示真 null表示空
比如:1 2 3 4 100 “hello” true null …
在js中所有的字面量都可以直接使用,但是直接使用字面量并不方便
console.log(1) //1
console.log(a) //报错a是变量不是字面量
变量
变量可以用“存储”字面量
并且变量中存储的字面量可以随意的修改
通过变量可以对字面量进行描述,并且变量比较方便修改
//推荐使用有块作用域
let a //声明一个变量
let b, c, d //声明多个变量
//不推荐使用没有块作用域
var e
var f, g, h
a = 10 //给变量赋值
a = "hello" //修改变量值为hello
// console.log(a)
//声明和赋值同时进行
let i = 100
console.log(i)
变量的内存
内存是存储数据的地方,程序要执行代码时,代码先从硬盘加载到内存中,再由内存发送给cpu,cpu才能对我们的代码进行执行
代码在执行的时候实际上都位于内存中,再进一步讲我们的程序 变量 各种语句 … 都存到内存中
变量中并不存储任何值,而是存储值的内存地址
内存是一块非常大的区域,要想存储数据要从大的区域里面开辟出一块小的区域,比如存储变量的区域就是用大的内存中开辟出的小区域,这块区域专门用来存变量,区域一旦开辟完以后这块区域大小就固定了,内存大小一旦确定就会带来问题比如向变量中存储数据,就像往盒子里面装东西,盒子的大小的是确定的但是东西(数据)的大小是不确定的,如果硬往盒子(变量)中装如果数据小还行能装下只不过变量会有一些空余的空间有点浪费但是能装下,但是数据比较大可能会把盒子(变量)撑破,会造成内存的溢出
所以这个变量能装下这个数据但是装起来会非常麻烦,因为变量的大小已经定了,所以js中的数据并不是直接存储到变量中的
数据在内存中开辟出新的空间,这个空间专门用来存储数据
存储数据时需要先做一件事,先去内存中找有没有该数据,没有才会开辟出新的空间,如果有就用旧的空间,不会重复去创建相同的数据
数据是直接存储到内存中的和变量不在同一个位置
每一个内存中的数据都有一个唯一的内存地址,通过内存地址就可以找到内存的数据
所以为了变量和数据产生联系在变量中存储的是数据的内存地址
当访问变量a的时候拿到的是他里面存储的内存地址,然后又通过内存地址找到数据
常量
不可变的变量叫做常量
在JS中,使用const声明常量,常量只能赋值一次,重复赋值会报错
在JS中除了常规的常量外,有一些对象类型的数据我们也会声明为常量
常量锁的是数据的内存地址
//声明常量使用大写
let PI = 3.1415926
PI = 10 //10 用let声明的变量值可以被改变
const PI = 3.1415926
PI = 10 //报错 常量只能赋值一次,重复赋值会报错
在JS中,所有可以由我们自主命名的内容,都可以认为是一个标识符
像 变量名 函数名 类名…
使用标识符需要遵循如下的命名规范:
标识符只能含有字母、数字、下划线、$,且不能以数字开头
标识符不能是JS中的关键字和保留字,也不建议使用内置的函数或类名作为变量名
命名规范:
通常会使用驼峰命名法
首字母小写,每个单词开头大写
maxlength --> maxLength
borderleftwidth --> borderLeftWidth
类名会使用大驼峰命名法
首字母大写,每个单词开头大写
maxlength --> MaxLength
常量的字母会全部大写
MAX_LENGTH
JavaScript简介
JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, Apache CouchDB and Adobe Acrobat. JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles.
历史
起源
JS诞生于1995年,当时网景公司(Netscape)开发的Navigator浏览器拥有着世界第一的市场占有率。网景公司一时风光无两。
当时的浏览器只能只能运行包含了HTML和CSS的静态网页,网页就相当于是报纸或杂志的电子版,没有任何的动态交互行为。网景公司预见到静态页面并不能够满足市场的需求,于是决定开发一款可以直接运行在浏览器端的编程语言以增加网页的动态交互功能。因此在1995年,Netscape决定在自家浏览器中添加一种脚本语言。
起初网景公司选择了两种方案,第一、和Sun公司和做直接在浏览器中嵌入Java。第二、聘请了一个程序员布兰登·艾克,让他在浏览器中嵌入Scheme语言,由于种种原因两种方案都没有实现。网景公司改变了方向,转而尝试开发一种新的编程语言,他们希望这种编程语言的语法类似于Java。开发新语言的任务落在了上文提到的布兰登·艾克身上。
艾克在很短的时间就完成了语言的设计,并于1995年9月首次发布测试版并且命名为LiveScript,12月发布正式版时又被重命名为JavaScript。为什么命名为JavaScript呢?因为Java当时比较火,这里可以理解为网景公司蹭了一下Java的热度。
战争
同年微软公司推出了新版本的IE,并引发了第一次浏览器大战。微软更是不讲武德的直接对JavaScript解释器进行了逆向工程并创建了IE版的JavaScript解释器,并且命名为JScript。JScript的功能和JavaScript一致,但实现方式上却不尽相同。这导致了同样的一个网页在不同的浏览器中有了不同的显示效果,于是浏览器的兼容问题出现了,网页工程师们的痛苦生活开始了。
为了促进JavaScript的标准化,网景公司向欧洲计算机制造商协会(ECMA International)提交了JavaScript,希望能由其制定发布JavaScript的语言规范。于是1997年6月,ECMAScript语言规范正式发布。1998年6月ECMAScript2发布,1999年12月ECMAScript3发布。与此同时,微软已经完全取得了第一次浏览器大战的胜利。IE浏览器的市占率达到了95%,JScript成为了JavaScript的事实标准,微软不再和ECMA合作,因此ECMAScript4被迫中止。
转折
这一情况持续到了2008年,谷歌推出了Chrome浏览器,其V8引擎的执行速度远远超过了其他的竞争对手。Chrome的出现使得微软的反抗者们看到了希望,他们在2008年开了一个小会,为了推动语言的发展,又将网页标准的制订工作推上了日程,于是2009年12月ECMAScript5标准发布,于此同时Nodes.js的发布使得JS在浏览器以外的地方大放异彩。自此开始,JavaScript进入了新的纪元。
自2015年起,ES标准开始固定在每年的6月份更新,并以年份命名。ES2015(ES6)、ES2016(ES7)一直到今天的ES2022(ES13)。
特点
JavaScript是一门非常有特点的编程语言。很多语言的特点在它身上都有所提现,这里我们只罗列了它众多特点中的一小部分。
解释型
JavaScript是一门解释型编程语言,解释型编程语言指代码不需要手动编译,而是通过解释器边编译边执行。所以要运行JS,我们必须现在计算机中安装JS的解释器。像是我们使用的浏览器都已经自动集成了JS的解释器(我们也称它是JS引擎)。Node.JS也是JS引擎,它使得JS可以直接在计算机中运行。无论是浏览器还是Node.js都需要遵循ECMAScript(ES)标准。
函数式编程
在JavaScript中函数是一等公民,它可以像其他类型的值一样赋值给任意变量,也可以作为参数传递给其他函数。所以在JS中函数是非常非常重要,通过函数式编程可以编写出功能强大又灵活的代码。
单线程
JavaScript是一个单线程的编程语言。简言之,JS同一时间只能做一件事,一件事完成才会继续做另一件事。单线程降低了JS代码的复杂度,也在某些场景下使得JS性能变差,所以JS又为我们提供了异步的编程方式,以提高代码的运行速度。
面向对象
几乎所有的现代的编程语言都是面向对象的编程语言,JS也不例外。所谓的面向对象,指将一组相关的功能(数据)统一封装到一个对象中,使用功能时无需考虑其实现的细节,直接找到对应的对象即可完成功能的调用。
扩展ES
ECMAScript只是为我们定义最基本的语法,像是数据类型(原始值、对象)、运算符、流程控制语句等内容。为了使JS可以适用于不同的场景,在不同的JS解释器中还为我们提供了不同的扩展以增强其功能。像是浏览器中的DOM、BOM使得我们可以通过JS操作网页和浏览器。NodeJS中的fs模块可以使我们直接操作计算机系统中的各种文件。所以我们学习JS时,除了要学习ES标准以外,还要学习它的各种扩展,才能在不同的环境中发挥出JS的最大威力。