ECMAScript - 初识 ECMAScript

1、编程语言

人与计算机之间的交流(二进制代码),用于向计算机发出指令,然后按照指令一步步完成响应的数据处理;
 
C
C++
C#
Java
Go
python
……
JS(JavaScript)(脚本编程语言)(基于浏览器的环境)

2、JavaScript 历史

起初它的主要目的是处理以前由服务器端负责的一些表单验证,并没有讲 javaScript 完全的运用起来

3、JavaScript 作用

传统功能
 
1、表单数据处理;
2、对 HTML、 CSS 添加修改;(对网页动态的修改)
3、检测浏览器平台
……
 
现代功能
 
1、TV 界面
2、移动端 APP 可以使用JavaScript写出来;(跨平台开发,劣势:性能不如原生开发的强)
3、PC 客户端
4、后端(NodeJS)
……

4、JavaScript 组成部分

1、ECMAScript(核心语法):

  • 基础语法、变量、数据类型、函数、逻辑处理
  • ES5、ES6、ES7 (ES NEXT)指代的是 ECMAScript 的各种版本
  • 前期核心:ES3、ES6;
     

2、DOM (文档对象模型)

  • 通过 ECMAScript 去修改 HTML 和 CSS
     

3、BOM (浏览器对象模型)

  • 获取浏览器的信息、操作网页的历史记录、URL 处理

5、JavaScript 的使用

5.1 引入方式

  • 直接在标签中执行相应对的事件属性:
    <button type = "button" onclik = "alert(123)">按钮</button>
  • 在 a 标签中的 href 中执行;
    <a href="javascript:;">默认超链接</a>
  • 在 HTML 中内嵌 JavaScript
    在 head 标签中加入 <script></script>
  • 将 JavaScript 单独写在一个文件中 (.js) (推荐使用)
    通过 <script src = "当前 JavaScript 文件路径"></script>
  • 浏览器控制台(一般使用于调试)

5.2 JavaScript 位置

  • head 结束标签之前
  • body 结束标签之前 (推荐使用)
  • HTML 渲染过程 :
    • 多线程拉取资源
    • 渲染网页时单线程
    • 从上往下渲染(读行执行)
      css在头部,先加载样式,然后在加载布局,反之,会出现闪的一下
      JavaScript 在最后面,只有页面加载后才使用交互
  • 重绘、回流
    重绘是一个元素的外观变化所引发的浏览器行为;
    比如颜色改变,背景图片改变,阴影改变等,只要不影响元素本身相对于浏览器文档的位置只会触发重绘。
    重排是引起DOM树重新计算的行为;

5.3、JavaScript 语法规则

  • 区分大小写(A 与 a 的含义不一样);
  • 命名的规则(小驼峰:backgroundColor)
  • 每条语句以 分号结尾

.

5.4、关于 JavaScript 中的输入输出

alert():弹窗;
prompt():输入弹窗;
document.write():直接将内容写入网页进行展示;
console.log():在控制台输出;

6、变量

6.1 什么是变量?

变化的一个量,高数计算机在内存中开辟一个存储空间,用于对数据进行保存。
 

6.2 创建变量(变量声明)

声明方式

  • var
  • let
  • const
     

通过 var 关键字声明变量
var 变量名;
var 变量名 = 变量值;
 

注意:变量没有类型限制,可以随时赋予任意的一个值。

  var a = 'abc';
  a = 123;

 
三者之间的区别

  • var 声明的变量有提升, let 和 const 声明的变量没有提升;
  • let 和 const 增加了块级作用域;
  • 在同一个作用域 var 可以重复声明变量, let 和 const 不能重复声明;
  • const 用于声明常量, 声明的时候必须赋值, 并且不能修改值 (但是引用数据可以修改值, 保证指针不变就可以);
  • let 和 const 会形成 暂时性死区
     

如果当前作用域 使用了变量 a 并且 当前块级作用域 通过 let / const 声明了这个变量, 那么声明必须放在使用之前:

  var a= 123;
  function log(){
  	console.log(a); //Cannot access 'a' before initialization
  	let a = 456;
  }

6.3 变量命名规则

  • 变量名组成:字母、数字和符号(只能是下划线或测美元符号)组成;
  • 首字符不能是数字,以字母开头;
  • 区分大小写;
  • 小驼峰式命名:从第二个开始,首字母大写
  • 不能使用关键字和保留字;

7、数据类型

7.1 分类

  1. 基本 数据类型
  2. 引用 数据类型(复杂数据类型)
     

7.2 基本数据类型

字符串类型: (string)

  var str = '一只 小网虫'; //单双引号都可

数值类型: (number)

  var num = 123; //由阿拉伯数字组成,不需要添加引号

 
布尔值类型 (Boolean)

  只有两个值 true 和 false 
  var isBool = true

 
未定义: (undefined)

  表示变量声明后, 并未赋值。
  let undef1 = void(0)
  let undef2
  
  console.log("undefined1", undef1) // undefined
  console.log("undefined2", undef2) // undefined

 
: (Null)

  表示为空, 可以用于占位、销毁变量等;
  let obj = null

  *注意:当使用 typeof 检测null 数据类型的时候,输出的是Object类型,其原因是因为,在JavaScript中 Object 与 Null 的二进制前四位都是0,检测出的结果为Object;

7.3 引用数据类型 – 对象 (object)

7.3.1 编程方式

面向过程(C语言)

分析解决问题的步骤,把这些步骤一步一步的实现.
       
注重: 解决问题的过程

面向对象(java语言)

把解决问题的方式分成各个对象,每一个对象通过不同的行为去解决问题.

注重: 那个对象能解决这个问题

 

7.3.2 面向对象的两个概念

:
对拥有共同特征的一类事物进行抽象, 比如说 人类
 

对象:
就是类具体的一个实例(特指某一个). 比如说 法外狂徒张三
 

什么是对象?
可以理解为,一个变量可以存储多个数据。

  var obj = {
  	属性:属性值(字符串、数值、布尔值、对象);
       ...
  }

什么是属性?

  属性就是一个静态数据。

什么是方法?

  就是一个函数,一段可以执行的代码,但是该代码必须主动调用,才会执行。

方法的定义:

  var obj = {
  	方法名:function(){
  		//可执行代码
  	}
  }

方法的调用:

  obj.方法名();

7.3.3 创建对象

字面量的方式创建

  var object= {}

构造函数

  var obj = new object()

 

7.3.4 对象结构

属性:静态的数据 (任意类型的数据类型: 字符串 \ 数值 \ 布尔值 \ 对象 \ 数组)
方法:动态的, 也就是函数, 用于执行一些逻辑的。
 

对象结构:

  var 变量名 = {
  	属性名:属性值,
  	属性名: 属性值,   //  属性值可以是任意数据类型    undefined 和 null 没有意义
  		...
  }

 

7.3.5 对象属性的操作

  var obj = {
  	name: "一只小网虫",
  	age: 20
  }

获取

  对象.属性名
  obj.name;

设置 (赋值)

  对象.属性名 = 属性值
  obj.height = '180cm'

另外一种获取的方法

  对象['属性名']

优势
 
obj.name 这种写法 不能和关键字冲突, 而 […… ] 内可以写表达式

  var a = 'nam' 
  console.log(obj[a + 'e']);

删除对象属性

  对象.属性名 = null;     //置空

  delete 对象.属性名;     //删除

7.3.6 对象遍历

for in

  for(var i in obj){  //
  	console.log("属性名:", i , "属性值: ", obj[i]);
  }

  Object.keys(对象名)     //返回对象所有的属性名
  
  Object.values(对象名)     //返回对象所有的属性值

7.4 构造函数 (ES5 类)

字面量创建对象:

  var student= {
  	name: 'jack',
  	age: 16,
  	city: '成都',
  	grade: '高二'
  }

批量创建对象:

(1) 工厂函数: 批量化创建对象

  function createStudent(name, age, city, grade){
  	//第一步, 创建空对象
  	var obj = new  Object()

  	//为该对象添加属性添加方法
  	obj.name = name;
  	obj.age = age;
  	obj.city = city;
  	obj.grade = grade;

  	//第三步、返回该对象
  	return obj;
  }

  var s1 = createStudent('lily', 12, '成都', '六年级');
  var s2 = createStudent('lucy', 12, '成都', '六年级');

  console.log(s1);

工厂函数结论: 可以解决 创建多个相似对象的问题,;
但是也有缺点:每次调用工厂函数创建的对象都是独立的 object,不存在联系;
 

(2) 构造函数 (批量化 类)

  function Student(name, age, city, grade){

  	//会隐式创建 obj = {}
  	//通过 this 修改上下文 指向 obj
  	this.name = name;
  	this.age = age;
  	this.city = city;
  	this.grade = grade;

  	//隐式操作: return obj;
  }

  Student.prototype.country = '中国'; //可以实现对象继承该属性

  // 使用:  实例化

  var s3 = new Student('john', 14, '成都', '初一');
  var s4 = new Student('boob', 14, '成都', '初二');
  console.log(s3, s4);

 
传递的参数也可以对象的形式

  function Student(prototype){
  	prototype = prototype || {} // 参数默认值 
  	//会隐式创建 obj = {}
  	//通过 this 修改上下文 指向 obj
  	this.name = prototype.name || 'john';
  	this.age = prototype.age || 12;
  	this.city = prototype.city || '成都';
  	this.grade = prototype.grade || '初一';

  	//隐式操作: return obj;
  }

  Student.prototype.country = '中国'; //可以实现对象继承该属性

  // 使用:  实例化

  var s3 = new Student({
  	name:'john',
  	age:14,
  	city:'成都',
  	grade:'初一'
  });

  console.log(s3);

这种写法的好处就是可以不用按照第一种方法的参数传递顺序去写;
 

7.4.1 构造函数的写法

  • 构造函数使用大驼峰, 用于区别普通函数;
  • 函数内部使用 this 关键字为对象添加属性和方法;
  • 调用构造函数时 必须通过 new 关键字.
     

7.4.2 new 关键字的作用

1、会在函数内部创建一个对象;
2、修改函数的上下文, 也就是将函数内部的 this 指向刚刚创建的 对象;
3、将空对象内部的原型指向构造函数的原型;
4、如果函数内部没有 return , 那么就会自动返回创建的对象.


7.5 数据类型检测

语法: typeof 变量

 

  typeof str ;

typeof 返回值有如下:

  String => string
  Number => number
  Boolean => boolean
  Undefined => undefined
  Null => object    //在二进制中  前三位 为0 表示为 object
  Object => object  //在二进制中  前三位 为0 表示为 object
  Array => object
  Function => function

说明:null 和 object 都会返回 object,是因为底层都是用 二进制 表示,在 JavaScript 中,二进制中 前三位都为 0 的话,表示为 object 类型


7.6 其他

十进制:常用
八进制:以 0 开头的数字,如 017
十六进制:以 0x 开头的数字,如:0xF
二进制:由 0 与 1 组成;
 

浮点数精度问题(浮点数就是小数)

  • 二进制浮点数不能非常精确的表述小数。
  • 先转整数在转小数

8、关于数据类型的转换

8.1 隐式转换

  var n1 = true;
  var n2 = 'true';
  console.log(n1 == n2); // 两个 = 代表相等   //false

  var s1 = '123';
  var s2 = 123;
  console.log(s1 == s2);  //true

  var s3 = '123';
  var n3 = 123;
  var z = s3 + n3;
  console.log(z, typeof z);   //123123  string

8.2 强制转换

主要是三个函数的使用

  Number()
  String()
  Boolean()

(1) 布尔值的转换
 
Boolean( 变量 )

  • 非空字符串转换都是 true;

  • 任何非 0 值都为 true;

  • 任何对象都为 true;

  • false 为 false;

  • 空字符串 为false;

  • 0 和 NaN 为false;

  • undefined 为false;

 
(2) 字符串的转换
 
String(变量)

  console.log(String(str));
  console.log(String(num)); // '123'
  console.log(String(bool)); // 'true'
  console.log(String(obj)); // '[object Object]'

  变量.toString() 不可以转换 Null 和 Undefind
  console.log(typeof num.toString());

(3) 数值的转换
 
Number(变量)

  • 如果是数值类型,会保留小数点;
  • 如果是字符串,则转为 NaN;
  • 布尔值 true 转为1,布尔值 false 转为 0;
  • 对象是 NaN;
  • NaN(not a number)不是数值,NaN 与 NaN 不相等;
  • 非数值不相等
     

parseInt(变量)

  • 从左往右开始转,只要遇到数值就可以转,如果一开始遇到非数值,就直接返回为 NaN
  • 保留整数位,去掉小数位
     

parseFloat( 变量 )

  • 从左往右开始转,只要遇到数值就可以转,如果一开始遇到非数值,就直接返回为 NaN
  • 保留小数位

9、运算符

9.1 算数运算符

  +:加法运算
  -:减法运算
  *:乘法运算
  /:除法运算
  % :取余数
  ++:自增
  --:自减

'++' 的理解:

  • 在没有赋值操作的时候,++ 放在变量前面和放在变量后面是一样的;
  • 如果 ++ 放在了变量的前面,先对变量 +1 然后在执行当前这行代码;
  • 如果 ++ 放在了变量后面,则是先执行这行代码,完成之后对变量进行 +1;
  • a++ 先运算在 + 1;
  • ++a 先+1 在运算;
     

9.2 拼接符

'+' 不同于其他的几个符号:

  • 运算中只要有一方是字符串,就会把另一方页转换位字符串,然后链接在一起;
  • 但是 '-''*''/'、只要一方是数值,另一方也会被转为数值

 

  1 + '1' == '11';
  true + true == 2;
  4 * '3' == 12;
  console.log(4 * {}); // NaN

 

9.3 赋值运算符

  =		//赋值
  +=     //i += 1; -->  i = i + 1;
  -=
  *=
  /=

9.4 关系运算符

  ==          //判断前后两个数据是否相等
  ===         // 判断前后两个数据是否全等,即:值和数据类型是否都相等;
  !=          //不相等
  !==         //完全不相等
  >           //是否大于
  <           //是否小于
  >=          //是否大于等于
  <=          //是否小于等于

9.5 逻辑运算符

只要有逻辑运算符的参与,返回结果就是 true 和 false

  &&      // 与, 同时
  ||      // 或, 二选一
  !      // 非, 取反   n = 123;  !n = false;

9.6 优先级

  • 逻辑非 优先级最高;
  • 其次是算术运算符;
  • 然后是关系运算符;
  • 然后是 逻辑与、逻辑或;
  • 最后是赋值运算符;
     

通过加 '()' 可以调整优先级。
 

9.7 三元运算符

语法:
条件 ? 条件为 true 执行的表达式 : 条件为 false 执行表达式;

  x > y ? '正确' : '错误';

  x = 1,
  y = 2,
  结果: 错误;

  x = 3,
  y = 2,
  结果: 正确

说明:二选一
 

9.8 算数运算比较:

  	表达式					 比值结果
  * null == undefined     ==>     true
  * 'NaN' == NaN          ==>     false
  * 5 == NaN              ==>     false
  * NaN == NaN            ==>     false
  * false == 0            ==>     ture
  * ture == 1             ==>     ture
  * ture == 2             ==>     false
  * undefined == 0        ==>     false
  * unll == 0             ==>     false
  * '100' == 100          ==>     ture
  * '100' === 100         ==>     false

10、转义字符

在这里插入图片描述


相关文章


在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只 小网虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值