JavaScript为解释性语言(读一行,执行一行)
一、js的组成部分:
- ECMAScript(ES3/ES6~9):js的核心语法,定义了语言本身的变量、数据值、操作语句、内存管理
- DOM: document Object model 文档对象模型,提供了一些属性和方法用来操作dom元素
- BOM: browser Object model 浏览器对象模型,提供了一些属性和方法用来操作浏览器
注意:当代项目开发,一般都是基于Vue/React完成的,基于这两个框架,我们已经不去操作DOM了,我们来操作数据,由框架本身帮助我们完成DOM的操作。
window.location.href=”http://www.baidu.com“; 让网页进行跳转
window.location.href 获取网页地址
二、ECMA 核心语法
变量和数据类型
1、变量(一个值的容器)
创建变量的六种方式:
- var 声明一个变量(es3)
- function 声明一个函数(es3)
- const 声明一个常量(es6)
- let 声明一个变量(es6)
- class 声明一个类
- import 基于es6模块导入一些信息(es6)
2、js 的命名规则
- 区分大小写
- 遵循驼峰命名法,由数字、字母、下划线、$组成,但是不能以数字开头;起语义化的名字;
- 基于$开头,一般代表使用JQ或者其他使用$的类库获取的内容
- 基于_开头,一般代表全局或者公开的变量
- 基于数字区分相似名称的变量
- let box1 = 10;
- let box2 =20;
- 想要分隔单词,可以使用_或者驼峰
- 不能是关键字或者保留字
- 关键字:就是代表特殊含义和功能的名字,比如var、function
- 保留字:以后可能会成为关键字,只是现在预先保留占用
3、两种简单的调试方式
- alert() //弹出框 (会把数据默认转换成字符串类型)
- console.log() //打印
4、数据类型
- 基本数据类型(栈,按值访问)
- number(NAN(not a number)也是number类型)
- string
- boolean
- null
- undefined
null和undefined的区别!!》》》day02笔记
- 引用数据类型(堆,按空间操作)
- function
- object
- 普通对象
- 数组
- 正则
- math
- date
- es6新增的Symbol(唯一的数据)
5、基本数据类型和引用数据类型的区别
基本数据类型的访问是按值访问,就是说可以操作保存在变量中的实际值
- 基本数据类型的值是不可变的(不能給基本数据类型添加属性和方法);
- 基本数据类型的比较是值的比较;
-
对象是属性和方法的集合,就是说引用数据类型可以拥有属性和方法
引用数据类型的值是可变的
- 引用数据类型的值是同时保存在栈内存和堆内存的对象
- 引用类型的比较是引用的比较
var person1 = '{}';
var person2 = '{}';
console.log(person1==person2); //true 比较的是两个字符串
var person1 = {};
var person2 = {};
console.log(person1==person2); //false 比较的是两个对象
6、对象和对象比较的是空间地址
[]==[]; //false 空间地址不同
7、对于不同的数据类型在比较的时候,除了以下的,剩下的都是先转换为数字类型在进行比较
- 对象和字符串比较的时候, 先把对象转换为字符串,再进行比较;
- null和undefined永远不等于任何一种数据类型,除了null==undefined、null===undefined(false);
- NaN永远不等于任何一种数据类型
[]==true ;//false
![]==true;// ===>先计算左边:![];转为布尔并取反(false)===>false==true;//false
![]==[]; //true 布尔==对象(两边都转换为number) ![]==>false==>0 Number([])=0
1. number类型
正数、负数、0、小数、NAN
NAN不等于NAN
2. string
把字符用单引号或者双引号抱起来的就是字符串类型
var num = 1;
var num2 = "1";
var num3 = '1';
3. boolean 布尔类型
trun、false
4. null和undefined
- null:空的对象指针
- undefined:未定义
5. 普通对象
- 普通对象:把属性名和属性值用大括号括起来的。
- 属性名(key、键):代表具有一定特征的名字(一般只有数字和字符串)
- 属性值(value、值):具体的值(可以是任意的数据类型)
6. 数组 []
7. Math 主要用来操作数字
Math.random(); // 获取0-1之间的随机数
Math.abs(-1.1); // 绝对值
Math.round(1.5); //四舍五入
8. date日期
new Date()
Mon Nov 09 2020 15:08:13 GMT+0800 (中国标准时间)
9. symbol 唯一的数据 es6新增
var str1 = Symbol("haha");
var str2 = Symbol("haha");
console.log(str1 == str2); //false
三、把其他数据类型转换为number的方法
- Number() 方法
- 字符串:
- 如果是空字符串,转换为0
- 如果是字符串中包含非有效数字,转换为NAN
- 布尔类型
- true:转换结果1
- false:转换结果0
- null:0
- undefined:NAN
- 对象:如果是引用数据类型的,转换为数字类型的时候,会隐式的先调用toString()方法,然后再用Number转数字;
- 字符串:
> var obj = {name:"123"};
< undefined
> obj.toString();
< "[object Object]"
> Number(obj);
< NaN
> var a = [];
< undefined
> a.toString();
< ""
> Number(a);
< 0
> var b = [1,2,3];
< undefined
> b.toString();
< "1,2,3"
> Number(b);
< NaN
> var c = [1];
< undefined
> c.toString();
< "1"
> Number(c);
< 1
2、parseInt 把字符串转换成整数(从左向右查找,遇到非有效数字或者小数点就停止查找)
> parseInt("12px23");
< 12
> parseInt("12.6555kkk");
< 12
> parseInt("12 3");
< 12
> parseInt("dasdas");
< NaN
3、parseFloat 把字符串转换为浮点型(可以识别到小数点)
> parseFloat("12.5");
< 12.5
> parseFloat("12.5sada");
< 12.5
> parseFloat("kk12.5sada");
< NaN
> parseFloat("12.5.6");
< 12.5
NAN !=NAN
四、isNaN 用来判断是否为有效数字,返回结果是布尔数据类型
如果说判断的这个数据不是数字类型,先隐式调用Number()方法转换为数字类型,再判断
isNaN(1);
> false
isNaN("2");
> false
isNaN(true);
> false
isNaN(false);
> false
isNaN(null);
> false
Number(null);
> 0
isNaN(0);
> false
isNaN(undefined);
> true
isNaN({name:"lili"});
> true
Number({name:"lili"});
NaN
isNaN("NAN");
true
isNaN([1, 2, 3]);
> true
[1, 2, 3].toString();
"1, 2, 3"
isNaN("1, 2, 3");
true
五、字符串
1、字符串的长度
- 获取字符串长度 变量.length
- 最后一个字符对应的索引 变量.length-1
- 索引: 每个字符对应的下标
- 获取相应的字符: 变量名[索引]
2、字符串的计算
- 字符串的加法除了计算,(遇到字符串)还可能是字符串的拼接
var i = "5";
i++;
console.log(i); //6
// 加法中 遇到字符串,就会进行字符串的拼接
console.log("6" + 10); //610
//加法中 遇到引用数据类型,首先调用.toString()方法,再进行字符串拼接
6+{}; // 6+"[object Object]"="6[object Object]"
6+[]; // 6+""="6"
// 对于- * / 会首先应用Number()方法,再计算
console.log("6"/2); //3
console.log("6"-2); //4
console.log("6"*2); //12
6-{}; // 6-NaN=NaN
3、把其他数据转换为字符串的方法
- 数据.toString();
- String(数据);
- null和undefined转换为字符串的结果”null”和”undefined”,但是null和undefined不能用.toString()方法,会报语法错误。
六、把其他数据转换为布尔
- Boolean();
- ! 转换为布尔取反;
- !! 转换为布尔取反再取反;
- 把其他数据类型转换为布尔,除了以下五种情况,转化的结果为false,剩余的都为true
- null
- undefined
- “”
- NaN
- 0