JavaScript概念
JavaScript是什么
JavaScript是一种基于对象和事件驱动具有相对安全性的客户端脚本语言。是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。
对象:
万事万物都是对象
对象三要素:
- 属性:用来描述一个对象的外观特征
- 方法(主动行为):对象自己本身所具备的能力
- 事件(被动行为):对象自己接受到一种指令需要完成的一种行为
解析执行与编译执行
编译执行:将代码编译成CPU认识的文件(语言)后整体执行。
解析执行:一行一行解析,解析一行执行一行。
弱类型脚本语言
脚本语言:弥补编译语言不足而存在的,作为补充语言,不用编译
弱类型语言:简单理解定义一个变量,可以有多种数据类型 (var temp)
前端三大模块
HTML:页面结构
CSS:页面表现:元素大小、颜色、位置、隐藏或显示、部分动画效果
JavaScript:页面行为:部分动画效果、页面与用户的交互、页面功能
JavaScript基础入门
JavaScript嵌入方式
行间事件(主要用于事件)
<input <input type="button" name="" onclick="alert('ok!');">
页面Script标签嵌入
<script type="text/javascript">
var a = ' 你 好 !';
alert(a);
</script>
外部引入标签
<script type="text/javascript" src="js/index.js"></script>
JAvaScript的变量
JavaScript变量声明用‘var’
初始化变量 var 变量名=值
变量的命名规则
驼峰命名规则:
getElementById/matherAndFather/aaaOrBbbAndCcc
遵从规则:
- 变量名必须字母或下标号‘_’或者‘$’为开头
- 变量名长度不能超过255个字符
- 变量名中不允许使用空格,首个字不能使用数字
- 不用使用脚本语言中保留的关键字及保留符号作为变量名。
- 变量名区分大小写。(javascript 是区分大小写的语言)
- 汉语可以作为变量名。但是不建议使用!!!(low)
- 变量、函数、属性、函数参数命名规范:
- 区分大小写
- 第一个字符必须是字母、下划线(_)或者美元符号($)
- 其他字符可以是字母、下划线、美元符或数字
JavaScript数据类型及转换
JavaScript数据类型分为两类:基本数据类型和特殊数据类型
基本数据类型
- 数字型(Number型)
- 字符串型(String型)
- 布尔型(Boolean型)
- 空值(null型)
- 未定义值( undefined)
数字型(Number型)
数字型(Number型)是最基本的数据类型。在JavaScript中与其他程序设计语言(C和Java)的不同之处在于,其并不区分整数类型(int)和浮点型数据(float)。在JavaScript中所有的数字都由浮点型表示。
整型数据
整型数据指数据形式为十进制整数,包括0和负数。如0、-100、20,都是“整形数据”
浮点型数据
指带有小数的数据
浮点数还可以使用指数法表示,即实数后加E或e
2.2e12 //2.2的12次方
5.5E11 //5.5的11次方
字符串型(String型)
用来表示文本的类型,用单双引号定界,由单引号定界的可以含有双引号,由双引号定界的可以含有单引号
布尔型(Boolean型)
布尔型(Boolean型)只有两个真(true)或假(false)。0可以看做false,1可以看做true
空值(null型)
整形、浮点型等数据在定义时系统都会分配一定的内存空间
未定义值( undefined)
如果一个变量虽然已经用var关键字声明了,但是并没有对这个变量进行赋值,而无法知道这个变量的数据类型,因此这个变量的数据类型是undefined,表示这是一个未定义数据类型的变量。
复合/复杂/特殊的数据类型
- object 对象类型
function 函数类型
数据类型转换
数字型转换字符型var a=11; | var c=a+’’; | var c=a.toString(); |
字符型转换数字型 var b=“123” var d=“123abc” | var c=parseInt(b) 转换成整形数字类型 | var c=parseFloat(b); 转换成浮点型数字类型 |
var c=Number(d); | var c=+d; | |
编译型语言和解释型语言之间的区别
1、程序控制权不同:
对于解释型语言而言,程序运行时的控制权在解释器(jre,.net)而不再用于程序。编译型语言对于编译器而言,运行时的控制权在用户程序。
2、运行速度不同:
一些网页脚本,服务器脚本以及辅助开发接口这样的对速度要求不高,对不同系统的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、Matlab等等。
编译语言由于程序执行速度快,同等条件下对系统的要求比较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++,Pascal/Object Pascal(Delphi)等都是编译型语言。
3、移植性不同:
解释型语言,例如Java语言,Java程序首先通过编译器编译成class文件,如果在Windows平台上运行,则通过Windows平台上的Java虚拟机(VM)进行解释。如果运行在Linux平台上,则通过Linux平台上的Java虚拟机进行解释执行。
所以说能跨平台,前提是平台上必须要有相匹配的Java虚拟机。如果没有Java虚拟机,则不能进行跨平台。
编译型语言,例如C语言,用C语言开发程序后,需要通过编译器把程序编译成机器语言(即计算机可以识别的二进制文件,因为不同的操作系统识别的二进制文件是不同的),所以C语言程序进行移植后,需要重新编译(如Windows编译成ext文件,Linux编译成erp文件)。
JS代码写在head中和写在body中的区别
由于html的加载顺序是从上到下的顺序进行加载的,因此在head中的javascript代码在页面还没加载完成时就已经被加载,而写在body中的javascript需要在整个页面加载完成之后才能被加载,所以在javascript代码不需要被立即执行时就可以放在head中,但是,如果javascript代码需要被立即执行就需要放在body中,不然按照从上打下的执行顺序就会报错,而不需要立即执行的代码放在head和放在body中的效果是相同的
JS中new关键字的用法
在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在javascript中,我们将这类方式成为Pseudoclassical。
基于上面的例子,我们执行如下代码
var obj = new Base();
new操作符具体干了什么呢?其实很简单,就干了三件事
var obj = {}; **obj.__proto__ = Base.prototype;**
**Base.call(obj);**
第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”,关于call函数的用法,请参看陈皓《Javascript 面向对象编程》文章
1、堆(heap)2、栈(stack)
堆 是堆内存的简称。
栈 是栈内存的简称。
栈,线性结构,后进先出,便于管理。堆,一个混沌,杂乱无章,方便存储和开辟内存空间
运算符
算数运算符 | +, -, *, /, % , ++ , – | 变量名++(–)先赋值后运算 ++(–)变量名先运算后赋值 |
赋值运算符 | = , +=, -= ,*=, /= , %= | a+=b即为a=a+b; a%=b即为a=a%b |
比较运算符 | < , >, ==, >=, <= , ===, != | 返回结果为 true/false 是布尔类型(Boolean类型) |
三目运算符、条件运算符、三元运算符 | 条件?true:false; |
流程语句
顺序结构: 从上到下 从左到右 执行
选择结构: 4种
单向选择结构:
if(条件){语句体}
var a=b
if(a==b){
alert(a=b)
}
双向选择结构:
if(条件){语句体}else{语句体}
var a=b
if(a==b){
alert("a等于b")
}
else{
alert("a不等于b")
}
多分支选择结构:
if(条件){语句体}else if(条件){语句体}else if(条件){语句体}else{语句体}
var a=b
if(a==b){
alert("a等于b")
}
else if(a>b){
alert("a大于b")
}
else{
alert("a既不大于也不等于b")
}