一.认识JavaScript
1.JavaScript简介
JS是一种高级的,解释型的编程语言,是一门基于原型,头等函数的语言,
是一门多范式的语言,它支持面向对象程序设计,指令式编程以及函数式编程
2.JavaScript的起源
1994年,网景公司(Netscape)发布了Navigaor浏览器0.9版
这是历史上第一个比较成熟的网络浏览器,在当时轰动一时
但是这个版本的浏览器只能用于浏览,不具备与访问者互动的能力,
所以网景公司急需要一种网页脚本语言,可以使得浏览器能与网页互动起来
网景公司招聘了布兰登艾奇,希望将Scheme语言作为网页脚本语言的可能性
3.JavaScript的历史
布兰登艾奇用了十天时间设计出了JavaScript
最初这门语言的名字是Mocha
在Navigator2.0beta版本更名为LiveScirpt
在Navigatorbate3版本正式更名为JavaScript,当时是为了给这门语言
搭上Java这个热词
但是这个语言更像是多种语言的大杂烩:
借鉴了C语言的基础语法
借鉴了Java语言的数据类型和内存管理
借鉴了Scheme语言将函数提升到头等公民的地位
借鉴了Self语言使用基于原型的继承机制
1996年11月,网景公司正式向ECMA提交语言标准
1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262
ECMA-262是一份标准,定义了ECMAScript
JavaScript成为了ECMAScript最著名的实现之一
除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言
所以说ECMAScript是一种规范,而JavaScript是这种规范的一种实现
4.JavaScript的组成
ECMAScript是JavaScript的标准,描述了该语言的语法和基本的对象
JavaScript是ECMAScript的语言层面的实现
因为除了语言规范之外,JavaScript还需要对页面和浏览器进行各种操作
除了基本实现外,还包括DOM和BOM操作
5.JavaScript由谁来运行?
不同的浏览器由不同的内核组成,
事实上,浏览器内核指的就是浏览器的排版引擎,排版引擎也称为浏览器引擎,
页面渲染引擎或样板引擎
JavaScript代码就是由JavaScript引擎来执行的
6.认识JavaScript引擎
为什么需要JavaScript引擎?
高级的编程语言都是需要被转换成最终的机器指令来执行的
事实上所编写的JS代码无论是交给浏览器或是Node执行,最后都是需要被CPU
所执行的,但CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行
所以需要JS引擎帮助将编写的JS代码翻译成CPU指令来执行
7.常见的JavaScript引擎
SpiderMonkey: 第一款JavaScript引擎,由布兰登艾奇开发
Chakra: 微软开发
JavaScriptCore: Webkit中的JavaScript引擎,Apple公司开发
V8: Google开发
8.浏览器内核与JS引擎的关系
以Webkit内核为例,Webkit事实上是由两部分组成的:
WebCore: 负责解析HTML,布局,渲染等相关工作
JavaScriptCore: 解析,执行JavaScript代码
二. JavaScript的基本语法
1.noscript元素
如果浏览器不支持JavaScript,用于提供替代内容
<noscript>
您当前的浏览器不支持JavaScript脚本,请更换浏览器
</noscript>
2.JavaScript的交互方式
alert: 接收一个参数,弹窗
document.write: 接收多个字符串,在浏览器页面中查看
console.log(): 接收多个参数,在浏览器控制台查看
propmt: 接收一个参数,输入框
alert()
document.write()
console.log();
var result = prompt()
console.log(result);
3.typeof操作符
因为ECMAScript的类型系统是松散的,
所以需要一种手段来确定任意变量的数据类型
对一个值使用typeof操作符会返回下列字符串之一:
"undefined"表示值未定义
"boolean"表示值为布尔值
"string"表示值为字符串
"number"表示值为数值
"object"表示值为对象或null
"function"表示值为函数
"symbol"表示值为符号
typeof()的用法:
typeof(x),它与typeof x相同
4.数据类型
Number类型
var age = 18
var height = 1.88
var num1 = Infinity
var num2 = 1 / 0
console.log(num1, num2)
var result = 3 * "abc"
console.log(result)
console.log(isNaN(result))
var num3 = 100
var num4 = 0x100
var num5 = 0o100
var num6 = 0b100
var max = Number.MAX_VALUE
var min = Number.MIN_VALUE
console.log(max, min)
String类型
var name = "coderzxx"
var address = "北京市"
var intro = "哈哈哈"
var message1 = 'Hello'
var message2 = "World"
var message3 = `Hello ${name}, ${2 + 3}`
var message4 = 'my name is "coderzxx"'
console.log(message4)
var message5 = 'my name \\ \'\' is "coderzxx"'
console.log(message5)
var message = "Hello World"
console.log(message.length)
var nickname = "coderzxx"
var infoStr = `my name is ${nickname}`
var info = "my name is"
var infoStr2 = info + nickname
console.log(infoStr)
console.log(infoStr2)
Boolean类型
Boolean类型仅包含两个值: true/false
boolean类型的基本使用:
var isLogin = true
isLogin = false
undefined类型
undefined类型只有一个值,就是特殊值undefined
如果声明一个变量,但是没有对其进行初始化时,此变量的默认值就是undefined
var message
var info = undefined
console.log(info === undefined)
console.log(message)
Object类型
Object类型是一个特殊的类型,通常将它称为引用类型或复杂类型,其他的数据类型
通常称为原始类型,因为原始类型的值只包含一个单独的内容(字符串/数字/其他)
Object往往可以表示一组数组,是其他数据的一个集合
var person {
name: "zxx",
age: 18,
height: 1.88
}
console.log(person)
console.log(person.name)
Null类型
var age = 0
var num = 0
var message = ""
var isAdmin = false
var book = null
console.log(typeof book)
5.数据类型的转换
其他类型转为String类型
var num1 = 123
var age = 18
var isAdmin = true
var numStr = num1 + ""
var ageStr = age + ""
var isAdminStr = isAdmin + ""
console.log(typeof numStr)
console.log(typeof ageStr)
console.log(typeof isAdminStr)
var num1Str = String(num1)
console.log(tyoeof num1Str)
其他类型转为Number类型
var num1 = "8"
var num2 = "4"
var result = num1 + num2
console.log(result)
var result2 = num1 * num2
console.log(result2)
var result3 = Number(num1)
console.log(typeof result3)
console.log(Number(undefined))
console.log(Number(null))
console.log(Number(""))
console.log(Number(true))
console.log(Number(false))
console.log(Number("abc123"))
console.log(Number("123abc"))
console.log(Number(" 123 "))
其他类型转为Boolean类型
var isAdmin = true
var num1 = 123
console.log(Boolean(num1), Boolean(undefined))
boolean转换有如下规则:
直观上为空的值,转成Boolean类型都是false
直观上为空的值: 0 "" undefined null NaN
注意事项:
console.log(Boolean(""))
console.log(Boolean("0"))
三.JavaScript运算符
1.认识运算元
运算元: 运算符应用的对象
例如: 5 * 2, 有两个运算元, 左运算元5, 右运算元2
2.算数运算符
var num1 = 5
var num2 = 8
var result = num1 + num2
var num = 20
var result2 = num % 2
console.log(2 ** 4)
console.log(Math.pow(2, 4))
3.赋值运算符
var num = 123
var num1 = num2 = num3 = 321
console.log(num1, num2, num3) 321 321 321
4.自增自减运算符
var currentIndex = 5
currentIndex++
console.log(currentIndex)
currentIndex--
console.log(currentIndex)
++和--的位置:
++--可以置于变量前或变量后
如果想要对变量进行操作,并且需要立即使用自增后的值,那么需要使用前置形式
前置形式返回一个新的值,但后置形式返回的是原来的值
5.比较运算符
var num1 = 20
var num2 = 30
var result = num > num2
console.log(result)
console.log(num1 == num2)
console.log(num1 != num2)
6.==与===的区别
var foo1 = 0
var foo2 = ""
console.log(Number(foo1))
console.log(Number(foo2))
console.log(foo1 == foo2)
console.log(foo1 === foo2)
7.三元运算符
var result = condition ? value1 : value2
var num1 = 100
var num2 = 200
var result = num1 > num2 ? true : false
console.log(result)
var message = 22
var result = message > 18 ? "成年" : "未成年"
console.log(result)
8.逻辑运算符
var chineseScore = 88
var mathScore = 99
if(chineseScore > 90 && mathScore) {
console.log("去游乐场")
}
练习: 如果有一门成绩大于90,可以打一小时游戏
if(chineseScore > 90 || mathScore > 90) {
console.log("打一小时游戏")
}
var isLogin = true
if(!isLogin) {
console.log("跳转到登录页面")
console.log("进行登录")
}
console.log("正常的访问页面")
9.逻辑或的本质
var name = "zxx"
var chineseScore = 88
var mathScore = 99
if(chineseScore > 85 || mathScore > 90) {}
var info = "abc"
var obj = {name: "zxx"}
var message = info || obj || "我是默认值"
console.log(message)
10.逻辑与的本质
var chineseScore = 80
var mathScore = 99
if (chineseScore > 90 && mathScore > 90) {}
var obj = {
name: "why",
friend: {
name: "kobe",
eating: function() {
console.log("eat something")
}
}
}
obj && obj.friend && obj.friend.eating && obj.friend.eating()
11.逻辑非的补充
var message = "Hello World"
console.log(Boolean(message))
console.log(!!message)
var obj = null
console.log(Boolean(obj))
console.log(!!obj)
四.分支语句与循环语句
1.switch分支
通过表达式的结果(或者变量)是否等于case语句的常量来执行相应的分支体
与if的不同点: switch语句只能做值的相等判断(默认使用的是===),而if语句可以做值的范围判断
switch的语法: switch语句至少有一个case代码块和一个可选的default代码块
var btnIndex = 0
switch(btnIndex) {
case 0:
console.log("点击了上一首")
break
case 1:
console.log("点击了播放/暂停")
break
case 2:
console.log("点击了下一首停")
break
default:
console.log("当前按钮的索引有问题~")
break
}
2.whilte循环
while(true) {
console.log("hello")
}
var i = 0
while(i <= 10) {
console.log(i)
}
3.do..while循环
do {
循环体
迭代条件
}while(条件表达式)
var i = 1
do{
console.log(i)
}while(i <= 10)
4.循环嵌套
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 3; j++) {
console.log("内层循环执行",j)
}
console.log("外层循环结束",i)
}
5.break和containue
var names = ["kobe", "nba", "cba", "abc", "aaa", "bbb"]
for(var i = 0; i < names.length; i++) {
if (names[i] ==="abc"){
break
}
console.log(names[i])
}
console.log("------")
for (var j = 0; j < names.length; j++){
if (names[j] === "aaa"){
continue
}
console.log(names[j])
}
6.生成随机数
for(var i = 0; i < 5; i++) {
var randomNum = Math.floor( Math.random() * 100)
console.log(randomNum)
}
五.JavaScript函数
1.认识函数
函数其实就是对某段代码的封装,这段代码帮助我们完成某一个功能
默认情况下JavaScript引擎或者浏览器会提供一些已经实现好的函数,也可以自己编写属于自己的函数
2.函数的使用步骤
使用函数包含两个步骤:
1.声明函数 -> 封装独立的功能
2.调用函数 -> 享受封装的成果
3.声明函数与调用函数
声明函数使用function关键字,这种写法称为函数的定义
function 函数名() {}
函数定义完之后里面的代码是不会自动执行的,函数必须经过调用才能被执行
调用函数通过函数名()即可,比如test()
4.函数的参数
形参: 定义函数时后面的小括号是用来接收参数用的,在函数内部作为变量使用
实参: 调用函数时后面的小括号是用来把数据传递到函数内部用的
function printInfo(name, age, height) {
console.log(`my name is ${name}`)
console.log(`age is ${age}`)
console.log(`height is ${height}`)
}
printInfo("zxx", 22, 1.88)
function sum(num1, num2) {
console.log(num1 + num2)
}
sum(20,30)
sum(30, 30)
5.函数的返回值
function foo() {
console.log("foo function")
}
var result = foo()
console.log("foo的返回值",result)
function bar() {
console.log("bar function")
return
}
var result = bar()
console.log("bar的返回值",result)
function baz() {
console.log("第一行")
console.log("第二行")
return
console.log("第三行")
}
baz()
function sum(num1, num2) {
var result = num1 + num2
return result
}
var result = sum(10, 20)
console.log(result)