day 51 js-2 函数,对象,正则 (定时器示例)
本文转载自cnblogs.liwenzhou-----哪吒博客
先来一个定时器让我们看看函数的效果:
<script src="/js/jquery-3.2.1.min.js"></script>
<script>
function qw(){
$(".sp").each(function(){
$(this).text("");
});
}
setTimeout("op()", 3000);
</script> {# 我们来解释一下上面的这段代码,我们的定时器需要有参数,#}
{#它本身就是一个内置函数,我们的函数都需要参数,这里面需要有三个参数,#}
{#但是有两个是必须要传入的参数code(代码),delay(时间),#}
{#我们需要把执行的代码传入到定时器里面,然后设定的时间也要传入到里面去,#}
{#那么我们就需要先写一个函数,上面的function qw就是我们定义的函数的名字,#}
{#这个函数的函数体,就是逻辑代码,我们需要这个函数去找到我们所要绑定时间的那些标签,#}
{#sp就是我们要找的那些标签,我们的标签是一些而不是一个,所以需要使用each内置函数,#}
{#在each里面我们要调用一个匿名函数,来实现我们的功能,------>找到需要定时的标签#}
{#然后把它的值在设定好的时间一过就把它清空掉,就类似于我们的for循环把里面的每一个#}
{#遍历出来,然后拿到每一个的text,就是我们的每一个标签里面的文本内容,#}
{#我们给这些文本内容清空,那么就是直接给文本里面的原来的内容覆盖掉,#}
{#用空字符串覆盖掉就可以得到清空的效果所以我们需要在text里面传值,#}
{#传空字符串,这就是我们的函数所实现的功能,到此为止就可了.剩下的就是我们的定时器的时间了,#}
{#我们把上面要求的code代码,就是我们的函数放进去,有一个条件是我们的代码必须是字符串,#}
{#所以我们的函数需要放到字符串里面传入进去,然后就结束了定时器的功能#}
函数*****(五颗星)
基本上跟python是差不多的,就是个别的关键字不同
函数的基本定义:
关键字function 函数名(参数1,参数2){
函数体,函数所封装的方法;
return 返回值;
}
函数的调用:
函数名(参数1,参数2)
举例
以下内容写入到js文件中,直接写入即可,然后再html文件中调用它 // //简单的基础函数
// function f1(){
// console.log("hello from other world");
// }
// f1();
//
// //带有参数的函数
// function f2(book,author){
// console.log("书名:"+book,"作者:"+author);
// }
// f2("gone with the wind", " fred");
//
// //带有返回值的函数
// function f3(arg1,arg2){
// return arg1+arg2;
// }
// var s=f3("freedom", "great");
// console.log(s);
//
匿名函数:
python中是用的lambda ----> lambda参数:返回值,
js中举例:
var sum=function f(arg1,arg2){
return arg1+arg2;
}
ret=sum(1,2);
console.log(ret);
js中是自执行函数:
(function(){})(arg);
for example:
(function (arg1,arg2){ //=========这里就是把函数名和参数直接用{}包裹起来了
console.log("雨送黄昏花易落"+(arg1+arg2)); //============这里是函数体,里面执行的是字符拼接
})(23,12); //=======直接传参,不用调用函数,这就达到了自执行的效果,省去了调用的过程
闭包
基本上跟python一致,内部函数可以访问外部函数的变量
举例:
// var city="beijing";
// function f(){
// var city="shanghai";
// function inner(){
// var city="lasa";
// console.log(city);
// }
// inner();
// }
// f();
执行结果是lasa // var city="daocheng";
// function bar(){
// console.log(city);
// }
// function f(){
// var city="fenghuang";
// return bar;
// }
// var ret=f();
// ret();
执行结果是daocheng // var city="lijiang";
// function f(){
// var city="sichuan";
// function inner(){
// console.log(city);
// }
// return inner;
// }
// var ret=f();
// ret();
执行结果是sichuan
内置方法和对象:
自定义对象,类似于python中的字典:
var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]); 遍历对象中的元素:
var a = {"name": "Alex", "age": 18};
for (var i in a){
console.log(i, a[i]);
}
data对象(类似我们学的python里面的time模块):
常用方法:
//方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:参数为毫秒数
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString()); //方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString()); //毫秒并不直接显示
小练习:
function getNow(){
var d4=new Date();
var dYear=d4.getFullYear();
var dMonth=d4.getMonth();
var dDate=d4.getDate();
var dHour=d4.getHours();
var dMinute=d4.getMinutes();
var dWeek=d4.getDay(); switch(dWeek){
case 1:dWeek="星期一";break;
case 2:dWeek="星期二";break;
case 3:dWeek="星期三";break;
case 4:dWeek="星期四";break;
case 5:dWeek="星期五";break;
case 6:dWeek="星期六";break;
case 0:dWeek="星期日";break;
default:
console.log("piss off");
}; if (dMinute <){
dMinute="0"+dminute;
} console.log(dYear+"-"+(dMonth+1)+"-"+dDate+" "+dHour+":"
+dMinute+" "+dWeek); }
getNow();
var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getYear () 获取年
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)
month月份是从0开始到11结束,而不是我们通常认为的1-12月
day是星期,而日期是date,且星期是从0-6,而不是从1~7
getfullyear是年份,而不是year,这几点区别要注意
json序列化*****五星知识点
跟python中类似,有序列化就会有反序列化.
python中是先import json,然后
json.dumps(obj)
json.loads(obj)
--------------------------------------------------------
var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(str1); //关键字是parse,
// 对象转换成JSON字符串
var str = JSON.stringify(obj1); //关键字是stringify,
正则表达式
python里面是import re
2. p1 = re.compile("^[a-zA-Z][a-zA-Z0-9_]{5,11}$") //解释一下,以1个字母(大小写)开头,然后以5个或者11个数字,字母(大小写),下划线,结尾.
3. p1.match()
4. p1.search()
5. p1.findall()
匹配模式:
忽略大小写, re.l
贪婪模式
js ------两种方式:
1,RegExp对象方式
1,var p=new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$","g")
2,p.test(str)
2,简写方式
/正则表达式/匹配模式
//RegExp对象
RegExp 对象
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g"); ===这里的pattern就是正则表达式,不是字符串,参数就被省略掉了
在使用RegExp创建对象的时候我们写作以上的方法,在括号里面写两个值,第一个值是pattern,第二个值是attributes,
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式
参数 attributes 是一个可选的字符串,包含属性 "g"(全局匹配)、"i" (区分大小写的匹配)和 "m"(多行匹配)。
如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
//创建正则对象方式1
// 参数1 正则表达式
// 参数2 验证模式:g(global)和i(忽略大小写)
// 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
// 创建RegExp对象方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");
// 匹配响应的字符串
var s1 = "bc123";
//RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
reg1.test(s1); // true
// 创建方式2
// /填写正则表达式/匹配模式
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
reg2.test(s1); // true
// String对象与正则结合的4个方法
var s2 = "hello world";
s2.match(/o/g); // ["o", "o"] 查找字符串中 符合正则 的内容//类似于python正则中的findall方法,把所有的结果找到然后返回
s2.search(/h/g); // 0 查找字符串中符合正则表达式的内容位置,只要找到一个符合要求的就立即返回不继续找后面的内容
s2.split(/o/g); // ["hell", " w", "rld"] 按照正则表达式对字符串进行切割
s2.replace(/o/g, "s"); // "hells wsrld" 对字符串按照正则进行替换
// 关于匹配模式:g和i的简单示例
var s1 = "name:Alex age:18";
s1.replace(/a/, "哈哈哈"); // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈"); // "n哈哈哈me:Alex 哈哈哈ge:18" 全局匹配
s1.replace(/a/gi, "哈哈哈"); // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18" 不区分大小写
gi ==========不区分大小写
var s="NAME :Alex Age12"
undefined
s.replace(/a/gi,"12popop12");
"N12popop12ME :12popop12lex 12popop12ge12"
var s1="name:alex age 12"
undefined
s1.replace(/a/g,"晓风干");
"n晓风干me:晓风干lex 晓风干ge 12"
s1.replace(/a/,"晓风干");
"n晓风干me:alex age 12"
我们在以上例子中可以得到结论,如果不加上g这个全局变量的话,那么匹配第一个符合条件的元素后就不会继续匹配下去了,加上了这个g全局变量之后就会把所有的元素都匹配完才罢休,这里就类似于我们的python正则匹配中的贪婪匹配的概念,
RegExp对象
举例:
//json 序列化和反序列化
/*
var w={
"name":"egon",
"age":39
}; //这里是声明一个对象
var s=JSON.stringify(w); //把声明的对象序列化成一个字符串string是字符串的意思,
console.log(w, typeof w); //查看这个对象,以及对象的类型
console.log(s, typeof s); //查看这个被转化过之后的数组,以及数组的类型
var obj=JSON.parse(s); //把序列化的对象反序列化成为字符串
console.log(obj, typeof obj);//查看反序列化之后的结果以及类型
*/ var w="alex 894";
ret=w.search('l');
ret1=w.search(/[0-9]{4}/g); //这里是找数字,含有0-9的数字的范围,然后要有4位数,
// 中括号里面是数字的取值范围,然后后面的大括号里是取多少位数
console.log(ret);
console.log(ret1); //这里是跟我们在python里面一样的,search找不到就会返回结果-1
有需要补充的内容是:
var a=/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g
undefined
a.test("qwe123");
true //我们第一次匹配完之后得到的结果是符合逻辑的没有问题的
a.lastIndex
6 //但是我们成功匹配完之后我们的最后的索引值会发生改变,此时的索引值就是上次成功匹配的最后的索引值5作为结束,新一轮匹配在5的基础上开始匹配,那么就轮到了6,
a.test("qwe123"); //所以我们的索引值这里是从6开始匹配的,得到的结果当然就是false,
false //得到了false的结果之后我们的最后索引值就会重新归位到0作为起点
a.lastIndex
0 //这里就是又变成了0
a.test(123) //如果没有成功匹配的话,我们的索引值是不会改变的,
false
a.lastIndex //因为匹配不成功,所以最后的索引值归位为0
0
======================================================================
js语言本身的bug:
/undefined/.test()
true
/undefined/.test(undefined)
true
/undefined/.test("undefined")
true
/^undefined$/.test("undefined")
true
/^undefined$/.test(undefined)
true
/^undefined$/.test()
true
它自己本身就会把字符串进行转换之后再匹配,太随便了.........
Math对象
Python里面:
直接使用max\min
JS里面:
通过Math对象来做数学相关操作的
Math.min()
Math.max()
Math.floor()
...
数学方面的常用方法:
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。 Math
举例:
Math.abs(-4)
4
Math.exp(3)
20.085536923187668
Math.floor(3.099887)
3
Math.log(4)
1.3862943611198906
Math.max(34,-987)
34
Math.min(34,56)
34
Math.pow(2,3)
8
Math.random()
0.30240178195156453
day 51 js-2 函数,对象,正则 (定时器示例)的更多相关文章
- js中函数对象创建的总结
在JavaScript的函数对象创建方法中,可以分为三种情况: 1:第一种是使用function语句定义函数 <script type="text/javascript"&g ...
- js 内置对象和方法 示例
JS内置函数不从属于任何对象,在JS语句的任何地方都可以直接使用这些函数.JS中常用的内置函数如下: 1.eval(str)接收一个字符串形式的表达式,并试图求出表达式的值.作为参数的表达式可以采用任 ...
- JS 字符串对象 数组对象 函数对象 函数作用域
一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...
- 1. js数据类型_对象_函数_内存
1. js数据类型有哪些? 基本(值)类型 Number ---- 任意数值 String ---- 任意字符串 Boolean ---- true/false undefined ---- unde ...
- js课程 3-9 js内置对象定时器和超时器怎么使用
js课程 3-9 js内置对象定时器和超时器怎么使用 一.总结 一句话总结:定时器: 1.定义 sobj=setInterval(func,1000); 2.清除 cl ...
- 关于js函数对象的理解
js中函数和对象的关系: 什么是对象?根据W3C上面的解释JS中所有事物都是对象,对象是拥有属性和方法的数据,由此可以看出除了基 本值类型不是对象(number.string.Boolean.Unde ...
- 分享一个好用的函数吧,将js中的对象转成url参数
JavaScript&jQuery获取url参数方法 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用方式: 最普通的,封装一个js函数 /** * 对 ...
- JS的函数和对象一
1.递归 在函数的内部调用自身,默认是一个无限循环. 2.匿名函数 没有名称的函数 function(){ } (1)创建函数 函数声明 function fn1(){ } 函数表达式 va ...
- JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
文章目录 1.对象的简介 2.对象的基本操作 2.1 代码 2.2 测试结果 3.属性和属性值 3.1 代码 3.2 测试结果 4.对象的方法 4.1 代码 4.2 测试结果 5.对象字面量 5.1 ...
随机推荐
- 在线HTTP POST/GET接口测试工具 - aTool在线工具
百度搜索标题或直接访问网址如下 网址:http://www.atool.org/httptest.php 很好用的在线http get/post 测试工具
- CSS margin合并
外边距合并 块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距 发生外边距合并的三种基本情况 1. 相邻的兄弟姐妹元素 <div id="marg ...
- nginx安装目录详解(针对centos)
- JS控制文本框内键盘上下左右键的焦点
avaScript键盘上下左右控制文本框焦点的方法有很多,这里简单说两种方法: 方法一: 创建一个table的dom元素,包含5行4列的文本框 <!DOCTYPE HTML PUBLIC &qu ...
- IO 多路复用
IO 多路复用 多路复用也是要用单线程来处理客户端并发,与其他模型相比多出了select这个模块. 程序不再直接问操作系统要数据,而是先发起一个select调用,select会阻塞直到其中某个sock ...
- Python基础之多态与多态性
切记:不要将多态与多态性这二者混为一谈,只要分开,就会很明朗了. 一.多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:动物分为人类.狗类.猪类(在定义角 ...
- Linux----centos安装mysql
第一步wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 第二步rpm -ivh mysql-community-r ...
- python unittest套件,修改为失败重新执行
#套件,修改为失败重新执行 import time import unittest from unittest.suite import _isnotsuite class Suit(unittest ...
- C++ Primer 笔记——嵌套类 局部类
1.嵌套类是一个独立的类,与外层类基本没什么关系.特别的是,外层类的对象和嵌套类的对象是相互独立的.在嵌套类的对象中不包含任何外层类定义的成员,在外层类的对象中也不包含任何嵌套类定义的成员. 2.嵌套 ...
- c++ 链表基础功能实现
#include<stack> struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* CreateListNode ...