JavaScript是一种脚本语言-编程语言:
- 编程语言(Programming Language):可以通过类似人类语言的“语言”来控制计算机,让计算机来时间我们的目的。
- JavaScript是布兰登 艾奇(神奇大哥)在1995年利用10天时间设计出来的。
- JavaScript是运行在客户端的脚本语言(不需要编译,运行过程中由js解释器逐行进行解释并执行)。
- JavaScript是一种弱语言,意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。在代码运行时,JS引擎根据=右边变量的值的数据类型判断变量的数据类型,运行完毕后,变量就确定了数据类型。
- JS是动态语言,变量的数据类型是可以变化的。
编程语言和标记语言的区别:
- 编程语言有很强的逻辑和行为能力。
- 标记语言(html)不用于向计算机发出指令,常用于格式化和链接。
ECMAScript:规定了JS的编程语言和基础核心知识。
JS的书写位置:
- 行内式
- 内嵌式
- 外部式
JS输入和输出语句
变量:
- 变量是用于存放数据的容器。我们通过变量名获取数据。
- 变量本质是在内存中申请的一块用于存放数据的空间。 在JS中声明变量用var
- var是一个JS关键字,用来声明变量,使用var声明变量后,计算机会自动为变量分配内存空间。
用var声明多个变量时
只需要写一个var,多个变量名之间用逗号隔开。
声明变量时的特殊情况:
变量名的命名规范:
- 由字母、数字、下划线、美元符号组成。
- 不能以数字开头、区分大小写、不能是关键字。
- 遵守驼峰命名法。
简单数据类型
- isNaN();用来判断变量是否是数字,返回布尔值
字符串转义符:
- 检测字符串的长度:str.length。
- 字符串拼接 用+号(字符串+任何类型,拼接后是一个新的字符串。) alert('hello' + 'word'); alert('hello '+变量+'word');//字符串拼接变量
- Undefined代表为定义的类型
- 检测数据类型(typeof): var num = 10; alert(typeof num);
数据类型的转换
- 转换为字符串类型:
2. 转换为数字型:
3. 转换成布尔型:
- 代表空、否定的值('',0,NaN,null,undefined)会被转换成false。
- 其余的值都会被转换成ture
运算符
- 算术运算符:
2. 比较运算符:
3. 逻辑运算符:
4. 赋值运算符:
5. 逻辑运算符的优先级:
流程控制分支
- ifelse语句:
- if(条件){执行语句}else{执行语句}
- 根据判断条件实行分支执行。
- 三元表达式: 条件表达式?表达式1:表达式2
- swich语句
swich(表达式){ case value1: 执行语句1; break; case value2: 执行语句2; break; ... default: 执行最后的语句; }
循环语句
- for循环 输出0-10 for(var i=0; i<10; i++){console.log(i);}
- while循环 输出0-10: var i = 0; while(i<11){console.log(i);i++;}
- do while循环 输出0-10: var i=0; do{console.log(i);}while(i<11){i++;console.log(i);}
复杂数据类型
1. 数组
Array
- 利用new创建数组 var arr = new Array();
- 利用字面量创建数组 var arr = [1,2,3];
- 访问数组元素根据下表访问: arr[index];(数组的下表从0开始)
- 数组的长度: arr.length;
- 冒泡排序原理:
数组的一些方法
-
- 检测是否为数组方法 (arr instanceof Array) arr.is Array();
-
- 添加删除数组元素方法
- 3. 数组排序方法
-
- 数组索引方法
-
- 数组转换字符串方法
-
- 数组拼接和截取方法
2. 对象
- 声明对象的方法:
- var obj = {};
- var obj = new Object();
函数
- 函数的声明
- function 函数名(形参1,形参2,...){}
- var fun = function(){}
- 函数的调用
- 函数名(实参1,实参2,...);
- fun();
- 形参和实参匹配:
- 如果实参大于形参的个数,函数会取到形参的个数,其他的不管。
- 如果形参的个数大于实参个数,没有接收值的形参就是underfined。
- 函数的返回值:
- 如果有return则返回return后面的值;
- 如果函数没有return返回undefined。
- arguments
- 当我们不确定有多少个参数传递的时候,可以用arguments来获取。arguments是一个伪数组。
构造函数:
function Star(uname){this.name = uname}
- 构造函数名字首字母要大写;
- 构造函数不需要return就可以返回对象
- 调用构造函数必须使用new;
- 只要new依次就创建一个对象;
- 属性名和方法签名必须加this。
构建函数创建对象:
var star = new Star(uname); - new关键字执行过程
-
- new构造函数可以在内存中创建一个空的对象;
-
- this就会指向刚才创建的空对象;
-
- 执行构造函数里面的代码,给这个空对象添加属性和方法;
-
- 返回这个对象;
内置对象
数学对象Math
随机数方法:
random();返回一个0<x<1的随机的小数
日期对象
- Date对象是基于1970年1月1日(世界标准世界)
- var dat = new Date();
- 获取日期的总毫秒数(时间戳)
dat.valueOf(); dat.getTime(); var date1 = +new Date();
字符串操作方法
- 字符串替换方法:replace()
var str = 'abc';
str.replace('a','d'); - 字符串转换为数组split() var str = 'a|b|c'; var arr = str.split('|'); ->arr = [a,b,c];
为什么字符串能用属性和方法?
- 因为基本包装类型
- 把简单数据类型,包装成为复杂数据类型
字符串的值是不可变的,改变值或者拼接字符串是开辟了新的地址
JavaScript作用域
指变量在某个范围内起作用和效果,目的是为了提高程序的可靠性更重要的是减少命名冲突。
- 全局作用域
- 局部作用域(函数作用域,在函数内部起作用和效果)
- 根据作用域不用变量分为全局变量和局部变量。
JavaScript作用域链
根据在内部函数中可以访问外部函数变量的机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链。
JavaScript预解析
JS解析器在运行JS代码时分为两步:预解析和代码执行。
- 预解析:JS引擎会把JS里面所有的var和function提升到当前作用域的最前面。
- 代码执行:按照代码书写的顺序从上往下执行。