JavaScript简介
JavaScript已经成为一门功能全面的编程语言,能够处理复杂的计算和交互,拥有了闭包,匿名函数,甚至元编程等特性。
面向对象编程 —— Object Oriented Programming,简称 OOP ,是一种编程开发思想。
它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。
js是什么?
是一门解释性的语言
是一门脚本语言
是一门弱类型语言
是一门基于对象的语言
是一门动态类型的语言:
1、代码(变量)只有执行到这个位置的时候,才知道这个变量中存储的是什么。
2、对象没有什么,只有点了,通过点语法,那么就可以为对象添加属性或方法。
js三部分:
- ECMAScript标准------js的基本语法
- DOM------Document object Model 文档对象模型
- BOM------Brower object Model 浏览器对象模型
js可以做的事:
- 网页特效;
- 服务端开发(Node.js);
- 命令行工具(Node.js);
- 桌面程序(Electron);
- App(Cordova);
- 控制硬件-物联网(Ruff);
- 游戏开发(cocosd-js);
规范
script标签一般是放在body的标签的最后,有时候会在head标签中。
变量名命名规范:一般都是小写;如果多个单词,第一个单词的首字母是小写的,后面的所有的单词的首字母都是大写的,这种命名方式称为:驼峰命名法。
项目里必须要有 //单行注释; /多行注释/
严格模式:在顶部添加"use strict" 。
最好把用完后不用的对象赋值为null,或者delete此对象。
函数内默认里面有一个name属性,值为函数名,只读。因而最好变量中不要使用name来命名属性,否则会出现未知错误。
函数中有一个caller属性,显示当前函数调用者。
了解
|-虽然语句结尾的分号不是必需的,但建议任何时候都不要省略它。
|-删除多余的空格来压缩ECMAScript。
|-arguments对象可以与命名参数一起使用,但与之一起使用,函数要么不写形参,若写形参就必须传入相同个数的实参,反之未被传入的形参等于undefined。
变量
声明变量:(区分大小写)
var 变量名;
js中的原始数据类型:
number,string,boolean,null,undefined,object。
两个特殊数值:①Infinity ②NaN
变量声明了,没有赋值,结果是undefined;或者函数没有明确返回值,但是接收了也为undefined。
获取变量的数据类型:
typeof 变量名
Number类型
在js中表示进制:
1.八进制:用0表示,后面接的时进制后的数字
var num = 012; // 输出为10
2.十六进制:用0x表示
var num = 0x1a; // 输出为26
isFinite()函数
判断参数是否位于最小和最大数值之间时会返回true。
isNaN()函数
接收一个参数,判断参数是否可以转换为数值。
·转数字:
parseInt(numString, [进制]);
parseFloat(numString); //只解析10进制值
·转String:
String(value);
toString([进制]); // 不能对null,undefined操作
Object类型
Object的每个实例都具有下列属性和方法:
- constructor:保存着用于创建当前对象的函数。
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。
- isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。
- propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。
- toLocaleString():返回对象的字符串表示。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。
操作符
关系运算符:> < >= <= ==(不严格) ===(严格) != !==
三元运算符:
表达式1 ? 表达式2 : 表达式3 //true执行表达式2,false执行表达式3
一元运算符:
var num = 10;
var sum = num ++ +10; //20,先参与运算后再加一
var sum = ++num + 10; //21,先加一再参与运算
运算
**分支结构:**if语句,if-else语句,if - else if - else if…语句,switch case语句,三元表达式。
**循环结构:**while循环,do while循环,for循环,for-in循环。
**调试:**浏览器F12,单击Sources,双击文件,设置断点;Watch设置自己想看的值;执行出现的蓝色框代表跳到那,但没有执行。
·变量定义:
语法:var 数组名 = new Array();或者var 数组名 = new Array[];
!!!注意:()或者[]内填一个数字为数字长度,多个数字则为元素。
函数(重要)
**函数注意问题:**要遵循驼峰命名法;一个函数只能完成一个功能。
**实参与形参:**实参是调用函数时传入的数或变量;形参是函数定义时定义在()内的参数。
function f1(x,y) { // x,y为形参
return x + y;
}
var result = f1(10,20); //10,20为实参
console.log(result);
arguments对象(伪数组):
arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。
arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性,但可以转换为真的Array。
function f1() {
console.log(arguments.length); // 返回5
}
f1(10,20,30,40,50);
// 转为数组
function test(){
var args = Array.prototype.slice.call(arguments);
console.log(Object.prototype.toString.call(args));
}
test(1,2,3);
// 输出[object Array]
变量、作用域和内存问题
基本类型值:简单的数据段。
引用类型值:可能由多个值构成的对象。
复制及存储
检查类型
被检查对象或值 instanceof 鉴定对象或值;
作用域(执行环境)
**全局变量:**声明的变量是使用var声明的变量。
**局部变量:**在函数内部声明的变量。
**隐式全局变量:**声明的变量没有var,包括在函数声明的,外部也可以使用。
**全局作用域:**全局变量的作用范围。
**局部作用域:**隐式变量的作用范围(函数内);
!!!用var声明的变量不可删除,隐式全局变量可以被删除(delete num;)。
作用域链
|-环境与环境的关系。
|-是保证对执行环境有权访问的所有变量和函数的有序访问。
|-搜索由内向外,先当前环境,再父环境。
没有块级作用域
比如在if定义了属性或for初始化变量的表达式所定义的变量,在}结束后会添加到全局变量中,也可以访问。
附加
JSON格式的数据
- 一般都是成对的,是键值对。
- 一般JSON格式的数据无论键还是值都是用双引号括起来的。
例:
var json = {
"name" : "小明",
"age" : "10"
};
// 访问
json["name"]; 或者 json.age;(遍历对象中确实有这个属性才可这样写,访问无影响)
// 遍历
for(var key in json) { // key存的时json对象的所有属性名
console.log(json[key]);
}
简单类型和复杂类型
|-原始数据类型:number,string,boolean,undefined,null,object。
|-基本类型(简单类型),值类型:number,string,boolean。
|-复习类型(引用):object。
|-空类型:undefined,null。
- 值类型栈中存储
- 引用类型:对象在堆中存储,地址在栈中存储。
- 值类型之间传递,传递的是值。
- 引用类型之间传