目录
一.JS的组成
1.1 组成
BOM(浏览器对象模型)、DOM(文档对象模型)、ECMAScript(核心语法);
JS解释器,运行的同时进行及时解释,并立即执行, 逐行执行代码,当某一处错误,报错,会卡住 ,不会执行后面的代码;
二、ECMAScript
2.1 简介
JavaScript是一种直译式脚本语言,它的解释器被称为JavaScript引擎,逐行解释并执行.
2.2 ECMAScript
JS是JavaScript的简称,ECMAScript是JS的核心语法,简称ES。
2.3 计算机的作用
计算机的作用就是处理数据。
所以,一门计算机语言,它一定要对数据进行规定。
所以,ES对数据进行了分类。
2.4 数据类型介绍
-
值类型(又可以叫做基本数据类型)
-
数字类型 (number) 深蓝色
-
字符串类型 (string) 黑色
-
布尔值(Boolean) = (true、 false) 蓝色
-
undefined 灰色
-
null 灰色
-
引用类型(又叫做对象类型)
总的来说,只要不是上面的五种,就属于引用类型
1. Array
2. Object
3. Function
4. RegExp
5. ......
2.5 JS的书写位置
2.5.1 HTML的script标签 (内嵌式)
js代码写在html结构中的<script>标签内;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> // JS代码书写在这里 </script> </body> </html>
2.5.2 JS文件中
<外部引入> 通过<script src = " 路径">标签外部引入js文件; <script>双标签内不能写内容;
如果是JS文件的话,那么我们需要通过script标签的src属性,把它引入。
<script src="01.js"></script> <script></sccript>便签内不能有内容
一个是JS文件中,一个是HTML文件中的script标签里。
区别就在于:最终HTML文件的体积。体积影响了传输速度。所以,写代码都往JS文件中写。
2.5.2 写在行内
<input type="button" value="按钮" onclick="alert('Hello World')" />
2.6 script标签的书写位置 (外部引入)
2.6.1 body标签的末尾
<body> ... ... ... <h1>今天是js的第一天</h1> <!-- 上面是HTML 下面是JS --> <script> // JS代码书写在这里 // document.write('<h1>今天是JS的第一天</h1>') </script> <script src="01.js"></script> </body>
放在body末尾的原因; 浏览器在执行代码的时候是从上往下执行(逐行解析),而JS又是可以操作元素的。必然要先有元素再执行JS才是合理的。
2.6.2 head标签的末尾
有时我们会见到放在head标签末尾的JS,这是因为它里面的代码被推迟了执行时间。
<script> window.onload = function() { alert("所有资源加载完毕了") } </script>
window.onload 这是一个后面要讲的"事件" 它会在当前页面所需的所有资源加载完毕之后执行。
补充: 一个script标签 如果设置了src 就不要再在里面写代码了
2.7 变量
变量就是用来储存数据用的容器;
之后每一次使用变量都是在使用这个数据。
变量,当然是因为它的内容可变。
2.7.1变量的使用
var 是js关键字,(variable) [variable 可变的,多变的,变量]
1.声明(定义)变量: var 变量名 ;
var age;
2.赋值: var 变量名 = 初始值; [= 是赋值,把右边的值赋给左边] (变量的初始化:声明一个变量,并赋值.)
var num1; var num = 3;
3. 使用变量:
输入、输出语句;
alert(‘内容’)弹出一个警示框; prompt(‘内容’)弹出一个输入框; console.log('控制台') 控制台输出;
变量的扩展:
1.变量的更新; 一个变量重新被定义,会覆盖原来的值, 以最后一次赋值为准;
2.同时命名多个变量; 只需要写一个var ,多个变量名之间, 英文逗号,隔开, 最后一个 ; 结尾.
var num1 = '内容',
num2 = '内容',
num3 = 'neirong';
声明变量的特殊情况;
- 如果一个变量只是定义(定义也叫声明)了,没有给初始值,此时它的值是undefined。 例如: var age ; console.log(age)
- 不声明,不复制,直接使用,报错; 例如: alert(tel);
- 不声明;直接复制 ,可以使用,但不推荐; 例如: qq = 123; alert(qq);
2.7.2 变量的命名规范
-
整体由数字(数字不能开头)、字母、下划线、美元$符号组成
-
不可以由数字开头
-
不能使用关键字、保留字当做变量名称 (js语言使用的,保留的)
-
严格区分大小写 如 : var app 不等于 var App;
-
推荐使用驼峰命名法; (首个字母小写,后面每个单词首字母大写) 如: var myFirstName;
2.8 数据类型
js是一种弱类性或动态语言;不用提前声明变量的类型,在程序运行中会被自动确定;
数据类型会根据等号右边的值来决定; 相同的变量可用作不同的类型;
2.8.1 字符串 (加了引号的)
引号 引起来的就是字符串类型
定义:单引号 ' 或者 双引号 " 推荐使用 单引号
var str = "这就是一段字符串"; var str1 = '我是一个新字符串';
注意: 单引号开头,就必须单引号结尾。双引号开头就必须双引号结尾。
字符串引号的嵌套: 单引号嵌套双引号 (外单内双); 双引号嵌套单引号(外双内单);
字符串的拼接
- 字符串拼接使用 + 连接 ,引引加加;
- 两边只要有一个是字符串,那么+就是字符串拼接功能
- 两边如果都是数字,那么就是算术功能。
console.log(11 + 11); //22
console.log('hello' + ' world'); //helloworld
console.log('100' + '100'); //100100
console.log('11' + 11); //1111
console.log('male:' + true); //maletrue
字符串长度
length属性用来获取字符串的长度 (空格和标点符号也算) 返回的是数字型
var str = '黑马程序猿 Hello, World!';
console.log(str.length); //19
转义字符
JS的字符串中,有转义字符这么一个概念。为了解决部分符号具备双重含义的特点。
var str ="'你好啊!'. Tom说:\"今天天气不错啊\""
\就是用于转义的符号,放置在引号之前;
转义字符有: \b 空格; \n 换行; \t 缩进 ; \\斜杠 等
2.8.2 数字类型 (整数或小数)
定义数字就是直接用键盘敲,默认是十进制。
进制的数字:
定义二进制: 0b101 数字范围:0和1;
定义八进制:0开头; 数字序列范围:0~7;
定义十六进制: 0x开头; 数字序列范围:0~9以及A~F;
特殊数字:
NaN 表示 "不是一个数" not a number;
Infinity 表示 "无穷大"
-Infinity 表示 "无穷小"
浮点数(小数)
- 浮点数的精度问题
-
var n = 5e-324; // 科学计数法 5乘以10的-324次方 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数 var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004 console.log(0.07 * 100); 不要判断两个浮点数是否相等
2.8.3 布尔值、
布尔值: true、 false
计算机内部存储:true为1,false为0;
布尔型和数字型相加,true代表1; false代表0;
2.8.4 undefined (未定义的)
一个变量声明后,未被赋值的,默认是undefined;
undefined
2.8.5 null (空,零)
null
null表示一个空,变量的值如果想为null,必须手动设置
2.9 数据类型判定
typeof 关键字 这个关键字的作用:判定数据类型
判定字符串
var str = '明月松间照'; console.log(typeof str) //string
判定数字
var num = 123 console.log(typeof num) //number
判定布尔值
var bool = true console.log(typeof bool) //bollean
判定undefined
var und = undefined console.log(typeof und) //undefined
判定null (这是一个bug,ES是不会修复它的)
var nulls = null console.log(typeof nulls) //object
如果用typeof对一个不存在的变量做判定, 不会报错 而是undefined ,可以利用这一点对某一个变量是否存在作判定
字面量
在源代码中一个固定值的表示法, 就是利用字面量如何表达这个值;
数值字面量:8, 9, 10,....... 控制台字体颜色: 深蓝色;
字符串字面量:'黑马程序员', 控制台字体颜色: 黑色;
布尔字面量:true,false 控制台字体颜色: 蓝色;
null和undefined控制台字体颜色: 灰色;
2.10 数据类型转换
2.10.1 数字型转字符串
-
String(变量) S大写
-
变量.toString() S大写
-
拼接空字符串 变量 + ' ' (隐式转换) {和字符串拼接的结果都是字符串} ( +号 这个符号有两个含义 1.数学加法运算符 2.字符串的拼接符号)
-
变量.toFixed()保留几位小数 ()括号内是保留几位小数; F大写;
判断是否是数字型 利用 isNaN();
- isNaN(不是数字)
- isNaN()方法:判断某些值是不是数字
- 不是数字:true
- 是数字:false
- 只要是数字就为false
- isNaN( )判断原理:
- 首先给内部Number( )进行转换,只要Number( )转换出来是数字直接为false,不是数字为true.
alert(isNaN('250'));//false
首先用isNaN的兄弟Number()进行转换为'250' =>数字250,然后给isNaN,isNaN一看,原来是数字,直接就是false.alert(isNaN(true));//false
首先用Number()进行转换 true => 1 ,isNaN一看是数字1,直接为false.
具体Number()方法转换参考数据类型转化文章alert(isNaN(2));//false 是数字为false
alert(isNaN(200));//false 是数字为falsealert(isNaN('你好'));//true 字符串为true,只要不是数字都为true
alert(isNaN(function(){alert(1)}));//true 函数也是true,只要不是数字都为true
2.10.2 字符串转数字型
-
parseInt() 取整数;可以去单位;
-
parseFloat() 可以取小数;去单位;
-
Number() 可以取小数,整数,不能去单位;
-
+变量 可以取小数,整数,不能去单位;
5. 减 乘 除 取余 隐式转换; +加号是字符串的隐式转换
转换成布尔类型
- Boolean( )
0 ''(空字符串) null undefined NaN 会转换成false; 其它都会转换成true
<sript>
var bool = Boolean("hello");
console.log(bool); //true
var bool = Boolean(1);
console.log(bool); //true
var bool = Boolean(0);
console.log(bool); //false
var bool = Boolean("");
console.log(bool); //flase
var bool = Boolean(null);
console.log(bool); //false
var bool = Boolean(undefined);
console.log(bool); //false
var bool = Boolean(NaN);
console.log(bool); //false
</script>