js

JS中的基础数据结构

一曲冷凌霜 提交于 2020-01-29 04:23:45
在js中有三种常用的数据结构是我们必须了解的,他们分别是栈(stack)、堆(heap)、队列(queue),下面分别做介绍。 栈(stack) 基础定义: 1.栈是一种数据结构,它表达的是数据的一种存取方式. 2.栈可用来规定代码的执行顺序,函数调用在js中叫做函数调用栈(call stack). 3.栈表达的是一种数据在内存中的存储区域. 栈的存取方式遵循 先进后出后进先出 (LIFO) 的原则,学习它的最终目的是掌握函数调用栈的运行方式,下面可通过往容器里存取小球的图例理解栈的存取方式: 如上图中,往容器中一次放入小球,最先放进去的在最底下(栈底),最后放进去的在最上方(栈顶)。当我们取出的时候,很明显需要我们先取出顶部(栈顶)的小球,才能依次取出下方(栈底)的。这种存取方式就是栈数据结构的的存取特点:先进后出,后进先出原则。 其中在数组(Array)中有两个栈方法映射了这种存取方式,分别是: push: 向数组末尾添加元素(进栈方法) pop: 弹出数据最末尾的一个元素(出栈方法) 堆(heap) 堆数据结构通常是一种树状结构,他的存取方式类似于书架上取书,无需关心存放顺序。 该图可用字面量的形式体现出来: var Heap = { a : 10 , b : 20 , c : { m : 300 , n : 400 } } 当我们想访问a时,只需通过Heap.a来访问即可

javascript (js)判断手机号码中国移动、中国联通、中国电信

僤鯓⒐⒋嵵緔 提交于 2020-01-29 04:22:14
原文: javascript (js)判断手机号码中国移动、中国联通、中国电信 我国使用的手机号码为11位,其中各段有不同的编码方向:前3位———网络识别号;第4-7位———地区编码;第8-11位———用户号码。 中国移动134、135、136、137、138、139、150、151、152、157、158、159、147、182、183、184、187、188.178(4G) 中国联通130.131.132.155.156.185.186.145(属于联通无线上网卡号段).176 (4G) 中国电信133.153.180.189.181 // 匹配移动手机号 var PATTERN_CHINAMOBILE = /^1(3[4-9]|5[012789]|8[23478]|4[7]|7[8])\d{8}$/ // 匹配联通手机号 var PATTERN_CHINAUNICOM =/^1(3[0-2]|5[56]|8[56]|4[5]|7[6])\d{8}$/; // 匹配电信手机号 var PATTERN_CHINATELECOM =/^1(3[3])|(8[019])\d{8}$/; 测试一下 : 中国电信: PATTERN_CHINATELECOM.test('18166889988'); true PATTERN_CHINATELECOM.test('13366889988')

js轮播图学习总结及案例

馋奶兔 提交于 2020-01-29 04:19:05
js轮播图有闪现的、过渡的,有横向的,竖向的,其中各有区别,但大体上差不多,需要自己去体会总结,我就直接上代码了 < ! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta http - equiv = "X-UA-Compatible" content = "ie=edge" > < title > Document < / title > < script src = "../todo.js" > < / script > < style > * { margin : 0 ; padding : 0 ; } div { width : 500 px ; margin : 0 auto ; } #view { width : 500 px ; margin : 0 auto ; height : 300 px ; border : 5 px solid black ; overflow : hidden ; position : relative ; } #banner li { float : left ;

[摘]C/C++实现js的split函数功能

限于喜欢 提交于 2020-01-29 03:01:45
今天在网上找了一下,发觉有比较多的方法,现在列出来,需要的朋友可以参考一下。 功能最丰富的就是第一种方法了: 1 vector< string > Split( const string & s, const string & match, bool removeEmpty= false , bool fullMatch= false ) 2 // 参数s为需要肢解的字符串 3 // 参数match为肢解匹配字符串 4 // 参数removeEmpty为是否删除空字符 5 // 参数fullMatch为是否只保留全匹配的字符串 6 7 下面为代码区: 8 #include < string > 9 #include 10 11 namespace Daniweb 12 { 13 using namespace std; 14 15 typedef string ::size_type ( string ::*find_t)( const string & delim, 16 string ::size_type offset) const ; 17 18 /// 19 /// Splits the string s on the given delimiter(s) and 20 /// returns a list of tokens without the delimiter

JS 基础篇(单例模式)

与世无争的帅哥 提交于 2020-01-29 02:49:11
以弹窗为例 < ! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta http - equiv = "X-UA-Compatible" content = "ie=edge" > < title > 单例模式 < / title > < / head > < body > < button type = "button" id = "btnpop" > 弹出 < / button > < button type = "button" id = "btnframe" > iframe < / button > < script > //把变 的部分封装,不变的隔离 ,开发-封闭原则 function createEl ( fn ) { var result ; return function ( ) { if ( ! result ) { result = fn . apply ( this , arguments ) ; } return result ; } } function createWindow ( ) {

js左右滑动手势

99封情书 提交于 2020-01-29 00:38:06
js左右滑动手势 在一定端最常用的事件之一会就是滑动了,但是js却未给我们提供相应的方式方法,所以只能自己封装了 实现心路历程 首先要判断滑动的两个大方向,垂直和水平 ,通过touchmove和touchstart的 坐标可以相减得出运动的垂直边与水平边,再比较两条边的大小判断得出滑动的大方向 得出大方向后可以通过相减后正负值的结果判断左右上下滑动,调用写好相关的函数 调用touchmove的时候,可以求得元素相应的位置,并赋值样式到css,可以拖拽运动 遇到的问题 在调用拖拽函数时无法获取touch三大事件的事件对象,可以在函数内储存到一个对象中并追加到事件对象中,然后再调用时当做实参传入用户可能未输入相应的参数,可以设置默认的参数,在真正输入时覆盖 好了上代码 < ! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta http - equiv = "X-UA-Compatible" content = "ie=edge" > < title > Document < / title > < style > . box {

02. js逆向需要的js知识

人走茶凉 提交于 2020-01-28 22:29:51
1. js简介 2. 与css和html之间的关系 html是结构层,闲荡与人的骨骼 css是表现层, 相当于衣服 js是行为层, 相当于人的行为和动作 2.js语法 2.1 数据类型 Object对象 是以key-value键值对的形式存在的集合 键 都是字符串类型 值 可以使任何类型 对象的拷贝分为深拷贝和浅拷贝 浅拷贝:支付至对象内存地址,类似于指针 深拷贝:完全克隆,生成一个新对象   let obj = {hello:'world'}; let obj1 = obj; // 浅拷贝 对新值进行修改会改变原来的值 let obj2 = JSON.parse(JSON.stringify(obj)); // 深拷贝, 生成一个新的对 // this is an object let me = { name:'zj', age:'19', gender:'male', hobby:'game' }; // assign attributes me.title = 'mr'; me.education = 'collage'; // get all keys Object.keys(me); // get all values Object.values(me); // iterate for (let key in me) { if (me.hasOwnProperty(key

js执行机制

不问归期 提交于 2020-01-28 20:54:01
1.先执行执行栈中的同步任务 2.异步任务(回调函数)放入任务队列中 3.当执行栈中的所有同步任务执行完毕后,就会依次读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,随后进入执行栈,开始执行。 来源: CSDN 作者: 木子雨吧 链接: https://blog.csdn.net/qq_44162474/article/details/104101907

JS基础--数据在内存中的表现

坚强是说给别人听的谎言 提交于 2020-01-28 18:20:19
1、基本数据类型在内存中的存储 var str1 = 'aa'; var str2 = str1;//在栈中另外开辟一个空间存储str2,并将str1中的内容复制到str2中 str1 = 'bb'; console.log(str1);//bb console.log(str2);//aa 2、复杂数据类型在内存中的存储 //在堆区创建对象,在栈区分配空间并指向堆区对象 //首先p1指向栈区地址,栈区指向堆区空间Person //p2 = p1:在栈区又开辟一块地址,且指向堆区同一对象Person //所以修改p1,也会修改p2 function Person(name,age){ this.name = name; this.age = age; } var p1 = new Person('aa',23); var p2 = p1; p1.name = 'bb'; console.log(p1.name);//bb console.log(p2.name);//bb 3、基本类型作为函数的参数 var num1 = 10,num2 = 20;//num1,num2在栈区 fn(num1,num2); console.log(num1);//10 console.log(num2);//20 function fn(n1,n2){//函数在堆区,但是形参n1

js(五、js中内置对象)

我与影子孤独终老i 提交于 2020-01-28 16:15:07
js内置对象 js里已经定义好的对象,有现成的属性和方法供我们使用。 js中共有17个内置对象: 声明变量类型 var carname = new String ; var x = new Number ; var y = new Boolean ; var cars = new Array ; var person = new Object ; 1. Array对象: (一、)以下可以直接修改原数组: (1.)length:得到数组长度。 (2.)push(你要追加的元素):向数组的结尾追加元素。 (栈方法后进先出) (3.)pop():删除数组最后一位元素。 (栈方法后进先出) (4.)unshift():向数组的开头添加元素。 (队列方法先进先出) (5.)shift():删除数组的第一位元素。 (队列方法先进先出) (6.)reverse():反转数组,用于颠倒数组中的元素。 (7.)splice(起始元素,删除元素数量,添加的元素)用于删除,插入,替换数组中的元素。 ```javascript var arr=["窝窝头","四个","烤红薯","煎饼果子"]; arr.splice(1,0,"一块钱"); console.log(arr); // ["窝窝头", "一块钱", "四个", "烤红薯", "煎饼果子"] 从1开始,在arr[0]元素后加入"一块钱"。