javascript 基础
javascript概述: javascript历史:
* 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言)
* Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.
后改名叫Javascript
* 微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆版叫Jscript.
* 为了统一三家,ECMA(欧洲计算机制造协会)定义了ECMA-262规范。
国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。
从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。EcmaScript是规范. ECMAScript
尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。
实际上,一个完整的JavaScript 实现是由以下 3 个不同部分组成的:
* 核心(ECMAScript)
* 文档对象模型(DOM) Document object model (整合js,css,html)
* 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的.
在简单的说,ECMAScript 描述了一下内容:
* 语法
* 类型
* 语句
* 关键字
* 保留字
* 运算符
* 对象 (封装,继承,多态) 基于对象的语言,使用对象。
二 javascript 的基础
2.1 变量
x=5
y=6
z=z+y
上面表达式中的x y z,在javascript中,这些字母被称为变量。 js中变量的总结:
--关于js中变量的总结:
(1) 变量是弱类型的(很随便)
(2) 声明变量时不用声明变量类型 全部使用关键字:var
[这里需要注意:如果加上关键字var 声明的变量即是:局部变量;如果不加var 则声明的变量是全局变量]
(3) 变量名 命名的时候,基本遵循其他语言一致的原则:字母数字下划线构成,数字不能开头!
js需要注意的是:变量名中字母区分大小写,即:解释器解析的时候,大小写代表的变量不同
(4) 命名规范原则:驼峰式,小驼峰,匈牙利类型标记法。。。
匈牙利类型标记法:
在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),
说明该变量的类型。例如,i 表示整数,s 表示字符串,
如下所示“Var iMyTestValue = 0, sMySecondValue = "hi";
2.2 基础规范
(1. 每行代码结束,可以不加分号,没有分号,默认会以换行符作为每行的结束;
[但是,为了代码规范,建议在每行的结尾添加分号]
(2. 注释:
单行注释:行前加://
多行注释:和CSS一样,/**/
(3. 使用{}来封装代码块
2.3 常量和标识符
常量:直接在程序中初相的数据值。
标识符:
1. 由不以数字开头的字母,数字,下划线,$符组成
2. 常用于表示函数、变量等的名称
3. Javascript中 代表特定含义的词称为保留字,不允许程序再定义为标识符。
--【ECMA V3标准保留的关键字有】
[break case catch continue default delete do else false
finally for function if in instanceof new null return switch
this throw true try typeof var void while with 等]
2.4 数据类型
javascript 中的数据类型,包括两种:
基本数据类型:Number Null String Undefined Boolean
引用数据类型:object 上述两种数据类型,在内存中的存放位置不同;
基本数据类型存放在内存中的 栈
引用数据类型,也就是对象,存放在内存中的 堆
而对于引用地址的具体编号值(类似于指针),也是存放在 栈 数字类型(Number)
简介:
最基本的数据类型
不区分整形数值和浮点型数值
所有数字都采用64位浮点格式存储,相当于Java和C语言中的double双精度
能表示的最大值是:±1.7976931348623157 x 10308
能表示的最小值是:±5 x 10 -324 整数:
在javascript中,10进制的整数,由数组的序列组成。
精确表达的范围是; -9007199254740992 (-253) 到 9007199254740992 (253)
超出范围的整数,精确度将受影响 浮点数:
使用小数点记录数据
使用指数记录数据 例如:4.3e23 = 4.3 x 1023 16进制和8进制的数字 表达
16进制的前面加上0x,八进制的前面加上0
16进制的数是由0-9,A-F等16个字符组成
8进制数由0-7的8个数字组成
# 2进制: 1111 0011 1101 0100 <-----> 16进制:0xF3D4 <-----> 10进制:62420
# 2进制: 1 111 001 111 010 100 <-----> 8进制:0171724
字符串(String)
简介:
string 是由Unicode字符、数字、标点符号组成的序列
字符串常量首尾由单引号或双引号括起
javascript中没有字符类型
特殊字符的转义需加:反斜杠\
常见的转义字符:\n 换行 \'单引号 \"双引号 \\反斜杠 String数据类型的使用
特殊字符的使用方法和效果
Unicode的插入方法
实例:
<script>
var str="\u4f60\u597d\n欢迎来到\"JavaScript世界\"";
alert(str);
</script>
布尔类型(Boolean)
简介:
Boolean类型仅有两个值:true 和 false,也代表1和0,
实际运算中 true=1,false=0
[注意:这里区分Python中的布尔值,Python中的true 或者 false,首字母要大写]
Boolean值主要用于JavaScript的控制语句,
例如:
(1)if (x==1){
y=y+1;
} else {
y=y-1;
}
(2)alert(Boolean(1))
Null & Undefined
Undefined类型
Undefined类型只有一个值,即:undefined
当声明的变量未初始化时(变量未定义或者定义了没有给赋值),该变量的默认值是:undefined
当函数无明确返回值时,返回的也是“undefined” Null类型
undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
尽管这两个值相等,但它们的含义不同。undefined用来表示声明了变量,但未对其初始化时赋予该变量的值;
null 则用于表示尚未存在的对象。
如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。 数据类型转换
JavaScript属于松散类型的程序语言
变量在声明的时候并不需要指定数据类型
变量只有在赋值的时候才会确定数据类型
表达式中包含不同类型数据则在计算过程中会强制进行类别转换 数字 + 字符串:数字转换为字符串
数字 + 布尔值:true转换为1,false转换为0
字符串 + 布尔值:布尔值转换为字符串true或false 强制类型转换函数
函数parseInt: 强制转换成整数 例如parseInt("6.12")=6 ; parseInt(“12a")=12 ; parseInt(“a12")=NaN ;parseInt(“1a2")=1
函数parseFloat: 强制转换成浮点数 parseFloat("6.12")=6.12
函数eval: 将字符串强制转换为表达式并返回结果 eval("1+1")=2 ; eval("1<2")=true 类型查询函数(typeof)
ECMAScript 提供了 typeof 运算符来判断一个值是否在某种类型的范围内。
可以用这种运算符判断一个值是否表示一种原始类型:如果它是原始类型,还可以判断它表示哪种原始类型。
函数typeof :查询数值当前类型 (string / number / boolean / object )
例如typeof("test"+3) "string"
例如typeof(null) "object "
例如typeof(true+1) "number"
例如typeof(true-false) "number"
例如typeof('test'+true) "string" ECMAScript 基本运算
加(+)、 减(-)、 乘(*) 、除(/) 、余数(% ) 加、减、乘、除、余数和数学中的运算方法一样 例如:9/2=4.5,4*5=20,9%2=1 - 除了可以表示减号还可以表示负号 例如:x=-y
+ 除了可以表示加法运算还可以用于字符串的连接 例如:"abc"+"def"="abcdef" 递增(++) 、递减(--)
假如x=2,那么x++表达式执行后的值为3,x--表达式执行后的值为1
i++相当于i=i+1,i--相当于i=i-1
递增和递减运算符可以放在变量前也可以放在变量后:--i
var i=1;
console.log(i++); 巧记:i++表示先赋值,后计算
console.log(++i); ++i表示先计算,后赋值
console.log(i--);
console.log(--i); 一元运算
var a=1;
a=-a; //a=-1 var c="10";
alert(typeof (c));
c=+c; //类型转换
alert(typeof (c)); var d="jesson";
d=+d;
alert(d); //NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
alert(typeof(d)); //Number //NaN特点:
var n=NaN;
alert(n>3);
alert(n<3);
alert(n==3);
alert(n==NaN);
alert(n!=NaN); //NaN参与的所有的运算都是false,除了!= ECMAScript 逻辑运算符
等于 ( == ) 、不等于( != ) 、 大于( > ) 、 小于( < ) 大于等于(>=) 、小于等于(<=)
与 (&&) 、或(||) 、非(!)
1 && 1 = 1 1 || 1 = 1
1 && 0 = 0 1 || 0 = 1
0 && 0 = 0 0 || 0 = 0 !0=1
!1=0 逻辑 AND 运算符(&&)
逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。
注意:
如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:
* 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
* 如果两个运算数都是对象,返回第二个对象。
* 如果某个运算数是 null,返回 null。
* 如果某个运算数是 NaN,返回 NaN。
* 如果某个运算数是 undefined,返回undefined。 逻辑 OR 运算符(||)
与逻辑 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值:
* 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象。
* 如果两个运算数都是对象,返回第一个对象。
* 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
* 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
* 如果某个运算数是 undefined,返回undefined。 ECMAScript 赋值运算符
赋值 =
JavaScript中=代表赋值,两个等号==表示判断是否相等
例如,x=1表示给x赋值为1
if (x==1){...}程序表示当x与1相等时
if(x==“on”){…}程序表示当x与“on”相等时
配合其他运算符形成的简化表达式
例如i+=1相当于i=i+1,x&=y相当于x=x&y ECMAScript等性运算符
执行类型转换的规则如下:
* 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
* 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
* 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
* 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。 在比较时,该运算符还遵守下列规则:
* 值 null 和 undefined 相等。
* 在检查相等性时,不能把 null 和 undefined 转换成其他值。
* 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
* 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。 ECMAScript 关系运算符(重要)
(1)比较数字和字符串:另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
var bResult = "25" < "3";
alert(bResult); //输出 "true"
上面这段代码比较的是字符串 "25" 和 "3"。
两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。
(2)不过,如果把某个运算数该为数字,那么结果就有趣了:
var bResult = "25" < 3;
alert(bResult); //输出 "false"
这里,字符串 "25" 将被转换成数字 25,然后与数字 3 进行比较,结果不出所料。 关系运算符 总结:
* 比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.
* 比较运算符两侧如果都是字符串类型,比较的是最高位的asc码,如果最高位相等,继续取第二位比较. 全等号和非全等号 ===
等号和非等号的同类运算符是全等号和非全等号。
这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。 void()
void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,
例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。
要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。
例如:<a href="javascript:window.open('about:blank')">Click me</a>
如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。
这是因为 window.open() 方法返回了新打开的窗口的引用。
然后该对象将被转换成要显示的字符串。
要避免这种效果,可以用 void 运算符调用 window.open() 函数:
<a href="javascript:void(window.open('about:blank'))">Click me</a>
这使 window.open() 调用返回 undefined,它不是有效值,不会显示在浏览器窗口中。 提示:请记住,没有返回值的函数真正返回的都是 undefined。 控制语句
if 条件控制语句:
if-else基本格式:
if (表达式){
语句1;
......
}else{
语句2;
.....
}
功能说明:
如果表达式的值为true则执行语句1,
否则执行语句2 if可以单独使用。 switch 选择控制语句
switch基本格式:
switch (表达式) {
case 值1:语句1;break;
case 值2:语句2;break;
case 值3:语句3;break;
default:语句4;
}
switch比else if结构更加简洁清晰,使程序可读性更强,效率更高。 总结:
1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选择执行哪一个case的语句块
3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载一次。
所以在多路分支时用switch比if..else if .. else结构要效率高。 循环控制语句:
for循环基本格式:
for (初始化;条件;增量){
语句1;
...
}
功能说明:
实现条件循环,当条件成立时,执行语句1,否则跳出循环体!
实例:
for (var i=1;i<=7;i++){
document.write("<H"+i+">hello</H "+i+"> ");
document.write("<br>");
}
----------------------------------------------
var arr=[1,"hello",true]//var dic={"1":"111"}
for (var i in arr){
console.log(i)
console.log(arr[i])
} while 循环控制语句
while循环基本格式:
while (条件){
语句1;
...
}
功能说明:
运行功能和for类似,当条件成立循环执行语句花括号{}内的语句,否则跳出循环。 练习:分别用for循环和while循环计算出1-100的和? 异常处理:
try {
//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
//e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}
注:主动抛出异常 throw Error('xxxx')
javascript 基础的更多相关文章
- JavaScript基础
JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 前端之JavaScript基础
前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...
- 一步步学习javascript基础篇(3):Object、Function等引用类型
我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...
- Javascript基础回顾 之(三) 面向对象
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- javascript基础01
javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...
- javascript基础02
javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
随机推荐
- react-native Simulator com+r不能刷新模拟器
这个问题是我按了com + shift + K 调出Simulatior 的时候出现的, 然后虚拟机就刷新不了了, 怎么按com+r都不好使. 在Simulatior的菜单栏选择Hardware -- ...
- PyCharm断点调试django
我在用PyCharm开发django程序的时候,对于打印日志调试程序的方式感觉还是有点麻烦和不直观,所以研究了一下断点调试的方法如下: 1.打开你的工程,在菜单栏里找到Run-->Edit Co ...
- 获取View的截图-将View转换为Bitmap对象
开发中,有时候需要获取View的截图来做动画来达到动画流程的目的 原理:将View的内容画到一个Bitmap画布上,然后取出 下面封装了一个从View生成Bitmap的工具类 /** * 将View转 ...
- SQL Sever 博客文章目录(2016-07-06更新)
SQL Server方面的博客文章也陆陆续续的写了不少了,顺便也将这些知识点整理.归纳一下下.方便自己和他人查看. MS SQL 数据类型 三大数据库对比研究系列--数据类型 MS SQL 表和视图 ...
- 实现从Oracle增量同步数据到GreenPlum
简介: GreenPlum是一个基于PostgreSQL数据库开发的MPP架构的数据库仓库,适用于OLAP系统,支持50PB(1PB=1000TB)级海量数据的存储和处理. 背景: 目前有一个业务是需 ...
- 机器学习实战笔记(Python实现)-06-AdaBoost
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- java中的浮点数
浮点数值不适用于禁止出现舍入误差的金融计算中.例如,命令System.out.println(2.0-1.1)将打印出0.8999999999999999999999999,而不是人们想象的0.9.其 ...
- 【C++】继承(虚基类)
类的继承与派生 面向对象技术强调软件的可重用性,这种重用性通过继承机制来实现.而在类的继承过程中,被重用的原有类称为基类,新创建的类称为派生类.派生类定义语法格式如下: class <派生类名& ...
- windows中,端口查看&关闭进程及Kill使用
测试过程中遇到的问题,杂记一: 1.netstat -ano | findstr "8001" 查看端口8001被哪个进程占用:由下图可以看出,被进程为3736的占用 2.查 ...
- MongoDB数据库的CURD的一些基本语句
from:http://www.data321.com/shujuku/20160514417/addToSetQianMianBuXuYaoJinXing 插入文档: SQL语句: INSERT I ...