JavaScript基础学习笔记(一)

1.java和JavaScript区别?

Java:服务器端的编程语言
JavaScript:运行在客户端(浏览器)的编程语言

2.JavaScript和HTML、CSS的区别

  1. HTML:提供网页的结构,提供网页中的内容
  2. CSS: 用来美化网页
  3. JavaScript: 可以用来控制网页内容,给网页增加动态的效果

3.JavaScript的组成
在这里插入图片描述
ECMAScript - JavaScript的核心
JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关
BOM - 浏览器对象模型
一套操作浏览器功能的API
通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
DOM - 文档对象模型
一套操作页面元素的API
DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作

4.变量
什么是变量
变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据
var声明变量

var age;

变量的赋值

var age;
age = 18;

同时声明多个变量

var age, name, sex;
age = 10;
name = 'zs';

同时声明多个变量并赋值

var age = 10, name = 'zs';

变量的命名规则和规范

  • 由字母、数字、下划线、$符号组成,不能以数字开头
  • 不能是关键字和保留字,例如:for、while。
  • 区分大小写(遵守驼峰命名法。首字母小写,后面单词的首字母需要大写)

5.数据类型
简单数据类型
Number、String、Boolean、Undefined、Null
复杂数据类型
Object
获取变量的类型
typeof

var age = 18;
console.log(typeof age);  // 'number'

6.注释
单行注释

// 这是一个变量
var name = 'hm';

多行注释

/*
var age = 18;
var name = 'zs';
console.log(name, age);
*/

7.数据类型转换
转换成字符串类型
toString()

var num = 5;
console.log(num.toString());

String()

String()函数存在的意义:有些值没有toString(),这个时候可以使用String()。
比如:undefined和null

拼接字符串方式

num  +  "",当 + 两边一个操作符是字符串类型,一个操作符是其它类型的时候,
会先把其它类型转换成字符串再进行字符串拼接,返回字符串

转换成数值类型
Number()

Number()可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN

parseInt()

// 返回12,如果第一个字符是数字会解析知道遇到非数字结束
var num1 = parseInt("12.3abc");  
// 返回NaN,如果第一个字符不是数字或者符号就返回NaN
var num2 = parseInt("abc123");   

parseFloat()

parseFloat()把字符串转换成浮点数
parseFloat()和parseInt非常相似,不同之处在与
parseFloat会解析第一个. 遇到第二个.或者非数字结束
如果解析的内容里只有整数,解析成整数

+,-0等运算

var str = '500';
console.log(+str);		// 取正
console.log(-str);		// 取负
console.log(str - 0);

转换成布尔类型

- Boolean()
0  ''(空字符串) null undefined NaN 会转换成false  其它都会转换成true

8.操作符
算术运算符
+、-、*、/、%
逻辑运算符(布尔运算符)

&& 与 两个操作数同时为true,结果为true,否则都是false
|| 或 两个操作数有一个为true,结果为true,否则为false
!  非  取反

关系运算符(比较运算符)
<、> 、>= 、 <= 、== 、!=、===、!=.=

=====的区别:==只进行值得比较,===类型和值同时相等,则相等
var result = '55' == 55;  	// true
var result = '55' === 55; 	// false 值相等,类型不相等
var result = 55 === 55; 	// true

赋值运算符
= += -= *= /= %=
运算符的优先级

优先级从高到底
	1. ()  优先级最高
	2. 一元运算符  ++   --   !
	3. 算数运算符  先*  /  %+   -
	4. 关系运算符  >   >=   <   <=
	5. 相等运算符   ==   !=    ===    !==
	6. 逻辑运算符 先&&||
	7. 赋值运算符

9.表达式和语句
流程控制(顺序结构、分支结构、循环结构)
分支结构
1.if语句
2.三目运算符
3.switch语句
循环结构
1.while语句
2.do…while语句
3.for语句
10.continue和break

break:立即跳出整个循环,即循环结束,开始执行循环后面的内容(直接跳到大括号)
continue:立即跳出当前循环,继续下一次循环(跳到i++的地方)

11.数组
数组的定义

// 创建一个空数组
var arr1 = []; 
// 创建一个包含3个数值的数组,多个数组项以逗号隔开
var arr2 = [1, 3, 4]; 
// 创建一个包含2个字符串的数组
var arr3 = ['a', 'c']; 
// 可以通过数组的length属性获取数组的长度
console.log(arr3.length);
// 可以设置length属性改变数组中元素的个数
arr3.length = 0;

获取数组元素
格式:数组名[下标] 下标又称索引
遍历数组

for(var i = 0; i < arr.length; i++) {
	// 数组遍历的固定结构
}

数组中新增元素
格式:数组名[下标/索引] = 值;

12.函数
函数的定义
函数声明

function 函数名(){
  // 函数体
}

函数表达式

var fn = function() {
  // 函数体
}

函数的调用
函数名();
函数的参数

// 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部
// 带参数的函数声明
function 函数名(形参1, 形参2, 形参...){
  // 函数体
}

// 带参数的函数调用
函数名(实参1, 实参2, 实参3);

匿名函数
没有名字的函数
自调用函数

(function () {
  alert(123);
})();

函数是一种数据类型
13.作用域
全局变量和局部变量
块级作用域
词法作用域
作用域链

14.预解析
变量提升

  • 变量提升
    定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。

  • 函数提升
    JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

// 1、-----------------------------------
var num = 10;
fun();
function fun() {
  console.log(num);
  var num = 20;
}
//2、-----------------------------------
var a = 18;
f1();
function f1() {
  var b = 9;
  console.log(a);
  console.log(b);
  var a = '123';
}
// 3、-----------------------------------
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
 var a = b = c = 9;
 console.log(a);
 console.log(b);
 console.log(c);
}

15.对象
函数的参数如果特别多的话,可以使用对象简化
对象创建方式

  • 对象字面量
var o = {
  name: 'zs',
  age: 18,
  sex: true,
  sayHi: function () {
    console.log(this.name);
  }
};   
  • new Object()创建对象
 var person = new Object();
  person.name = 'lisi';
  person.age = 35;
  person.job = 'actor';
  person.sayHi = function(){
  console.log('Hello,everyBody');
}
  • 工厂函数创建对象
function createPerson(name, age, job) {
  var person = new Object();
  person.name = name;
  person.age = age;
  person.job = job;
  person.sayHi = function(){
    console.log('Hello,everyBody');
  }
  return person;
}
var p1 = createPerson('张三', 22, 'actor');
  • 自定义构造函数
function Person(name,age,job){
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayHi = function(){
  	console.log('Hello,everyBody');
  }
}
var p1 = new Person('张三', 22, 'actor');

new关键字
new在执行时会做四件事情

  1. new会在内存中创建一个新的空对象
  2. new 会让this指向这个新的对象
  3. 执行构造函数 目的:给这个新对象加属性和方法
  4. new会返回这个新对象

this详解
JavaScript中的this指向问题,有时候会让人难以捉摸,随着学习的深入,我们可以逐渐了解现在我们需要掌握函数内部的this几个特点
1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
2. 一般函数直接执行,内部this指向全局window
3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化

对象的使用
遍历对象的属性

var obj = {};
for (var i = 0; i < 10; i++) {
  obj[i] = i * 2;
}
for(var key in obj) {
  console.log(key + "==" + obj[key]);
}

删除对象的属性

function fun() { 
  this.name = 'mm';
}
var obj = new fun(); 
console.log(obj.name); // mm 
delete obj.name;
console.log(obj.name); // undefined

16.简单类型和复杂类型的区别
基本类型又叫做值类型,复杂类型又叫做引用类型
值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。
引用类型:复杂数据类型,在存储是,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。
堆和栈
堆栈空间分配区别:
  1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
注意:JavaScript中没有堆和栈的概念,此处我们用堆和栈来讲解,目的方便理解和方便以后的学习。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

// 下面代码输出的结果
function Person(name,age,salary) {
  this.name = name;
  this.age = age;
  this.salary = salary;
}
function f1(person) {
  person.name = "ls";
  person = new Person("aa",18,10);
}

var p = new Person("zs",18,1000);
console.log(p.name);
f1(p);
console.log(p.name);

17.内置对象
JavaScript中的对象分为3种:内置对象、浏览器对象、自定义对象
JavaScript 提供多个内置对象:Math/Array/Number/String/Boolean…

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页