Python一路走来 DAY15 Javascript
一 如何编写
- 存在形式:HTML的head中
- HTML的body代码块底部(推荐)(HTML代码从上到下执行,防止加载过慢)
二 变量
- <script type="text/javascript">
- // 全局变量
- name = 'seven';
- function func(){
- // 局部变量
- var age = 18;
- // 全局变量
- gender = "男"
- }
- </script>
三 数据类型
JavaScript 中的数据类型分为原始类型和对象类型:
- 原始类型
- 数字
- 字符串
- 布尔值
- 对象类型
- 数组
- “字典”
- ...
特别的,数字、布尔值、null、undefined、字符串是不可变。
1、数字(Number)
JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。
转换:
- parseInt(..) 将某值转换成数字,不成功则NaN
- parseFloat(..) 将某值转换成浮点数,不成功则NaN
特殊值:
- NaN,非数字。可使用 isNaN(num) 来判断。
- Infinity,无穷大。可使用 isFinite(num) 来判断。
- a='hollyshit'
- "hollyshit"
- ret= parseInt(a)
- NaN
- ret
- NaN
- isNaN(ret)
- true
- isNaN(3)
- false
- ab= Infinity
- Infinity
- 常量
- Math.E
- 常量e,自然对数的底数。
- Math.LN10
- 10的自然对数。
- Math.LN2
- 2的自然对数。
- Math.LOG10E
- 以10为底的e的对数。
- Math.LOG2E
- 以2为底的e的对数。
- Math.PI
- 常量figs/U03C0.gif。
- Math.SQRT1_2
- 2的平方根除以1。
- Math.SQRT2
- 2的平方根。
- 静态函数
- Math.abs( )
- 计算绝对值。
- Math.acos( )
- 计算反余弦值。
- Math.asin( )
- 计算反正弦值。
- Math.atan( )
- 计算反正切值。
- Math.atan2( )
- 计算从X轴到一个点的角度。
- Math.ceil( )
- 对一个数上舍入。
- Math.cos( )
- 计算余弦值。
- Math.exp( )
- 计算e的指数。
- Math.floor( )
- 对一个数下舍人。
- Math.log( )
- 计算自然对数。
- Math.max( )
- 返回两个数中较大的一个。
- Math.min( )
- 返回两个数中较小的一个。
- Math.pow( )
- 计算xy。
- Math.random( )
- 计算一个随机数。
- Math.round( )
- 舍入为最接近的整数。
- Math.sin( )
- 计算正弦值。
- Math.sqrt( )
- 计算平方根。
- Math.tan( )
- 计算正切值。
- 复制代码
Math
2、字符串(String)
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。
常见功能:
- obj.length 长度
- obj.trim() 移除空白
- obj.trimLeft()
- obj.trimRight)
- obj.charAt(n) 返回字符串中的第n个字符
- obj.concat(value, ...) 拼接
- obj.indexOf(substring,start) 子序列位置
- obj.lastIndexOf(substring,start) 子序列位置
- obj.substring(from, to) 根据索引获取子序列
- obj.slice(start, end) 切片
- obj.toLowerCase() 大写
- obj.toUpperCase() 小写
- obj.split(delimiter, limit) 分割
- obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效)
- obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
- obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项,
- $数字:匹配的第n个组内容;
- $&:当前匹配的内容;
- $`:位于匹配子串左侧的文本;
- $':位于匹配子串右侧的文本
- $$:直接量$符号
- 范例chrome console:
3、布尔类型(Boolean)
布尔类型仅包含真假,与Python不同的是其首字母小写。
- == 比较值相等(不分类型)
- != 不等于
- === 比较值和类型相等
- !== 不等于
- || 或
- && 且
4、数组
JavaScript中的数组类似于Python中的列表
常见功能:
- obj.length 数组的大小
- obj.push(ele) 尾部追加元素
- obj.pop() 尾部获取一个元素
- obj.unshift(ele) 头部插入元素
- obj.shift() 头部移除元素
- obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素
- obj.splice(n,0,val) 指定位置插入元素
- obj.splice(n,1,val) 指定位置替换元素
- obj.splice(n,1) 指定位置删除元素
- obj.slice( ) 切片
- obj.reverse( ) 反转
- obj.join(sep) 将数组元素连接起来以构建一个字符串
- obj.concat(val,..) 连接数组
- obj.sort( ) 对数组元素进行排序
- a = [];
- []
- a.length
- 0
- a.push(123);
- 1
- a
- [123]
- a.pop();
- 123
- a.unshift(456);
- 1
- a
- [456]
- a.unshift(456);
- 2
- a
- [456, 456]
- a.unshift(456);
- 3
- a
- [456, 456, 456]
- a.shift(456);
- 456
- a
- [456, 456]
- b = [11,22,33,44,55];
- [11, 22, 33, 44, 55]
- b.splice(1,0,666);
- []
- b
- [11, 666, 22, 33, 44, 55]
- b.splice(1,1,888);
- [666]
- b
- [11, 888, 22, 33, 44, 55]
- b.splice(1,1);
- [888]
- b
- [11, 22, 33, 44, 55]
- b.slice(1,3);
- [22, 33]
- b.reverse();
- [55, 44, 33, 22, 11]
- b.join(":")
- "55:44:33:22:11"
- b.concat(b)
- [55, 44, 33, 22, 11, 55, 44, 33, 22, 11]
- b.sort();
- [11, 22, 33, 44, 55]
数组例子
5. "字典"
JS没有这个数据类型,它会创建一个对象。
四 其他
1、序列化
- JSON.stringify(obj) 序列化 对象-->字符串
- JSON.parse(str) 反序列化 字符串 --> 对象啊
- python中 JSON.dump: 对象-->字符串 Json.load:字符串--> 对象
- a = {'k1':123,'k2':456};
- Object {k1: 123, k2: 456}
- b = JSON.stringify(a);
- "{"k1":123,"k2":456}"
- b
- "{"k1":123,"k2":456}"
- JSON.parse(b);
- Object {k1: 123, k2: 456}
JSON实例
- a = {'k1':123,'k2':456};
2、转义
URL用下面四个转译
- decodeURI( ) URl中未转义的字符
- decodeURIComponent( ) URI组件中的未转义字符
- encodeURI( ) URI中的转义字符
- encodeURIComponent( ) 转义URI组件中的字符
- 值用escape转译(cookie)
- escape( ) 对字符串转义
- unescape( ) 给转义字符串解码
- URIError 由URl的编码和解码方法抛出
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <script>
- var url = "http://www.etiantian.org?n=王宝强";
- var ret = encodeURI(url);
- console.log(ret);
- var u = decodeURI(ret);
- console.log(u);
- var r2 = encodeURIComponent(url);
- console.log(r2);
- </script>
- </body>
- </html>
案例(浏览器调试查看)
- <!DOCTYPE html>
3、eval
JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。
- eval()
- EvalError 执行字符串中的JavaScript代码
4、正则表达式
1、定义正则表达式
- /.../ 用于定义正则表达式
- /.../g 表示全局匹配
- /.../i 表示不区分大小写
- /.../m 表示多行匹配
JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容)12345var
pattern = /^Java\w*/gm;
var
text =
"JavaScript is more fun than \nJavaEE or JavaBeans!"
;
result = pattern.exec(text)
result = pattern.exec(text)
result = pattern.exec(text)
注:定义正则表达式也可以 reg= new RegExp()
2、匹配
JavaScript中支持正则表达式,其主要提供了两个功能:
- test(string) 检查字符串中是否和正则匹配
12345
n =
'uui99sdf'
reg = /\d+/
reg.test(n) --->
true
# 只要正则在字符串中存在就匹配,如果想要开头和结尾匹配的话,就需要在正则前后加 ^和$
- exec(string) 获取正则表达式匹配的内容,如果未匹配,值为null,否则,获取匹配成功的数组。
123456789101112131415161718192021
获取正则表达式匹配的内容,如果未匹配,值为
null
,否则,获取匹配成功的数组。
非全局模式
获取匹配结果数组,注意:第一个元素是第一个匹配的结果,后面元素是正则子匹配(正则内容分组匹配)
var
pattern = /\bJava\w*\b/;
var
text =
"JavaScript is more fun than Java or JavaBeans!"
;
result = pattern.exec(text)
var
pattern = /\b(Java)\w*\b/;
var
text =
"JavaScript is more fun than Java or JavaBeans!"
;
result = pattern.exec(text)
全局模式
需要反复调用exec方法,来一个一个获取结果,直到匹配获取结果为
null
表示获取完毕
var
pattern = /\bJava\w*\b/g;
var
text =
"JavaScript is more fun than Java or JavaBeans!"
;
result = pattern.exec(text)
var
pattern = /\b(Java)\w*\b/g;
var
text =
"JavaScript is more fun than Java or JavaBeans!"
;
result = pattern.exec(text)
3、字符串中相关方法
1
2
3
4
5
6
7
8
|
obj.search(regexp) 获取索引位置,搜索整个字符串,返回匹配成功的第一个位置(g模式无效) obj.match(regexp) 获取匹配内容,搜索整个字符串,获取找到第一个匹配内容,如果正则是g模式找到全部 obj.replace(regexp, replacement) 替换匹配替换,正则中有g则替换所有,否则只替换第一个匹配项, $数字:匹配的第n个组内容; $&:当前匹配的内容; $`:位于匹配子串左侧的文本; $':位于匹配子串右侧的文本 $$:直接量$符号 |
5、时间处理
JavaScript中提供了时间相关的操作,时间操作中分为两种时间:
- 时间统一时间
- 本地时间(东8区)
更多操作参见:http://www.shouce.ren/api/javascript/main.html
- d = new Date()
- Tue Sep 06 2016 08:07:40 GMT+0800 (CST)
- d.getDate()
- 6
- d.getHours()
- 8
- d.getUTCHours();
- 0
- d.setMinutes(d.getMinutes() + 2);
- 1473120580122
- d
- Tue Sep 06 2016 08:09:40 GMT+0800 (CST)
- d.setMinutes(d.getMinutes() + 200);
- 1473132580122
- d
- Tue Sep 06 2016 11:29:40 GMT+0800 (CST)
Example (chrome console)
五、语句和异常
1、条件语句
JavaScript中支持两个中条件语句,分别是:if 和 switch
- if(条件){
- }else if(条件){
- }else{
- }
if语句
- switch(name){
- case '':
- age = 123;
- break;
- case '':
- age = 456;
- break;
- default :
- age = 777;
- }
switch语句
2、循环语句
JavaScript中支持三种循环语句,分别是:
- var names = ["alex", "tony", "rain"];
- for(var i=0;i<names.length;i++){
- console.log(i);
- console.log(names[i]);
- }
for语句1
- var names = ["alex", "tony", "rain"];
- for(var index in names){
- console.log(index);
- console.log(names[index]);
- }
for语句2
- while(条件){
- // break;
- // continue;
- }
while语句
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <script type="text/javascript">
- var li = [11,22,33,44];
- dict = {'k1':11, 'k2':22}
- //第一种for (不支持字典)
- for(var i=0;i <li.length; i++){
- console.log(i,li[i]);
- }
- // 第二种for (支持列表和字典)
- for(item in li){
- console.log(item,li[item]);
- }
- for(var key in dict){
- console.log(key,dict[key]);
- }
- </script>
- </body>
- </html>
For范例
3、异常处理
1
2
3
4
5
6
7
8
9
10
|
try { / / 这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行 } catch (e) { / / 如果 try 代码块中抛出了异常,catch代码块中的代码就会被执行。 / / e是一个局部变量,用来指向Error对象或者其他抛出的对象 } finally { / / 无论 try 中代码是否有异常抛出(甚至是 try 代码块中有 return 语句), finally 代码块中始终会被执行。 } |
注:主动跑出异常 throw Error('xxxx')
Python中主动抛出异常 raise Exception(xxxx)
六、函数
1、基本函数
JavaScript中函数基本上可以分为一下三类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/ / 普通函数 function func(arg){ return true; } / / 匿名函数 var func = function(arg){ return "tony" ; } / / 自执行函数 (function(arg){ console.log(arg); })( '123' ) |
注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。
自执行函数可以做封装用(?)
2、作用域
JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。
切记:所有的作用域在创建函数且未执行时候就已经存在。
1
2
3
4
5
6
7
8
9
10
11
|
function f2(){ var arg = 111 ; function f3(){ console.log(arg); } return f3; } ret = f2(); ret();
|
3、闭包
「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」
由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。
1
2
3
4
5
6
7
8
9
10
|
function f2(){ var arg = [ 11 , 22 ]; function f3(){ return arg; } return f3; } ret = f2(); ret(); |
4、面向对象
1
2
3
4
5
6
7
8
9
10
11
|
function Foo (name,age) { this.Name = name; this.Age = age; this.Func = function(arg){ return this.Name + arg; } } var obj = new Foo( 'alex' , 18 ); var ret = obj.Func( "sb" ); console.log(ret); |
对于上述代码需要注意:
- Foo充当的构造函数
- this代指对象
- 创建对象时需要使用 new
上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:
1
2
3
4
5
6
7
8
9
10
11
12
|
function Foo (name,age) { this.Name = name; this.Age = age; } Foo.prototype = { GetInfo: function(){ return this.Name + this.Age }, Func : function(arg){ return this.Name + arg; } } |
Python一路走来 DAY15 Javascript的更多相关文章
- Python 一路走来 HTML CSS Javascript
前端三把利器 HTML -标签 (成对写不容易忘记闭合) 自闭和标签 标签里写个 xx=xx, 表示标签的属性 ...
- Python一路走来 RabbitMQ
一:介绍:(induction) Rabbitmq 是一个消息中间件.他的思想就是:接收和发送消息.你可以把它想成一个邮政局.当你把你的邮件发送到邮箱的,首先你需要确认的是:邮政员先生能把你的邮件发送 ...
- Python一路走来 - python基础 数据类型
对于Python,一切事物都是对象,对象基于类创建 Python数据类型 python主要的数据类型主要包括以下几种类型: (1) 数字型 (2) 字符串 (3) 列表 (4) 元组 (5) 字典 ( ...
- Python 一路走来 Django
Web 框架 (本质:socket) Python web框架 自己实现socket - Tornado 基于wsgi ...
- Python 一路走来 DOM & Jquery
DOM 查找: 直接查找 间接查找 —getElementById ...
- Python一路走来 线程 进程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...
- Python一路走来 面向对象1
面向对象: 类,对象 函数放在类里,叫方法 封装 #如何调用 1. 创建对象, 类名() obj= Foo() 2. 通过对象去执行方法 obj.mail("leon@me.com" ...
- Python一路走来 - 模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- Python一路走来 Python算法
冒泡排序: 1,2位置左右比较.大的排右边,继续比较2,3 ...... list=[5,7,2,8,12,1] #print(len(list)) for j in range(len(list)) ...
随机推荐
- Android UI 调试常用工具(Dump view UI hierarchy for Automator)
UI调试时程序员比较头疼的问题:有时候经常会被1dp.2dp的问题,搞得无言以对(Android开发深有体会) 下面介绍一个在实际开发过程中常用的一个调试工具,可以精确到每个View在屏幕中的绝对位置 ...
- BZOJ 2693 jzptab
http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题解: 考虑把lcm转化成gcd那答案就是然后神奇的设:就有:一样可以枚举 的取值,这是O(√ ...
- Keil C51 中的函数指针和再入函数
函数指针是C语言中几个难点之一.由于8051的C编译器的独特要求,函数指针和再入函数有更多的挑战需要克服.主要由于函数变量的传递.典型的(绝大部分8051芯片)函数变量通过堆栈的入栈和出栈命令来传递. ...
- Windows 中默认安装的.Net 版本
Windows contains a version of .NET by default. Here's a listing of them. XP .NET v1.0 -- Service pac ...
- web前端框架选型
1.1.界面使用脚本语言有html5,php5,css3,js动态库jquery等 1.2.html采用技术为最新html5技术,html5生成的页面在phone.pad.Phablets.pc也可方 ...
- 【转】C语言文件操作解析(三)
原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...
- HDU_1238——最大子串搜索
Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...
- NOI2014 D2T3 购票 简单粗暴解法(凸包维护)
之前说过这题能用点分治(详见 http://www.cnblogs.com/jasonyu/p/noi2014.html),但其实还有更粗暴的解法. 要求出一个点的答案,我们需要知道树上一段路径的点形 ...
- POJ 2886 Who Gets the Most Candies? 线段树。。还有方向感
这道题不仅仅是在考察线段树,还他妹的在考察一个人的方向感.... 和线段树有关的那几个函数写了一遍就对了,连改都没改,一直在转圈的问题的出错.... 题意:从第K个同学开始,若K的数字为正 则往右转, ...
- PHPSTORM实用快捷键
alt + F7 find usages 功能,可以很方便的找到函数在哪里调用了 Ctrl + E 可查看最近打开文件或项目 项目名右键选择"Local History | Show His ...