js

在pycharm中使用protobuf

廉价感情. 提交于 2020-01-24 23:31:41
文章目录 主要目标 在pycharm中使用protobuf 1. 工具安装 1.1 下载protoc 1.2. pycharm中安装插件 1.3 安装对应库 2. 使用 2.1 编写proto文件 2.2 转化为指定语言的文件 将protobuf中的枚举类型转换为JS对象 1. 问题来了 2. proto文件转js脚本 主要目标 记录在pycharm中使用protobuf的过程 将protobuf中的枚举类型转换为JS对象 在pycharm中使用protobuf 1. 工具安装 1.1 下载protoc 下载适合自己系统版本的protoc 点击链接 建议将protoc将入环境变量中,便于使用 1.2. pycharm中安装插件 在pycharm中可以编辑.proto文件,但是需要安装protobuf support插件 1.3 安装对应库 python版本 pip install protobuf 2. 使用 2.1 编写proto文件 具体语法规范还是看教程吧,木有整理,直接贴代码。 message_proto.proto文件 syntax = "proto3"; // package top.huanmengmie; // 定义包名 enum ErrorCode{ Failed = 0; Success = 1; // 请求成功 ParamInvalid = 10; //

JSON

泄露秘密 提交于 2020-01-24 23:18:44
JSON是一种表示结构化数据的格式,而非编程语言,相对于XML的烦琐,JSON是在js中读写结构化数据的更好的方式,可以将JSON直接传递给eval(),而不需要创建DOM对象;当然并非只有JS可以使用JSON,很多的编程语言都具有针对JSON的解析器环绕序列化器 JSON语法 可以用来表示三种类型的值 简单值:可以表示数值,布尔,字符串,null 注意:①不支持 undefined; ②JSON字符串必须使用双引号 对象:表示的是一组无序的键值对,其中的值可以是简单类型的也可以是复杂类型的 JSON中的对象和JS中的对象是不一样的 ①JSON中没有变量的概念,因此没有变量的声明 ②末尾没有分号 ③对象的属性必须加双引号 数组:表示的是一组有序的值的序列(JS中字面量的方式) 注:JSON数组中也没有变量和分号 将对象和数组结合起来可以构成更为复杂的数据集合 //js对象 var obj = { name : "zs" , age : 23 } ; // JSON对象 { "name" : "zs" , "age" : 23 } var arr = [ 12 , "hi" , true ] ; //js中的数组 [ 12 , "hi" , true ] //JSON 中的数组 解析和序列化 早期JSON解析器使用的是js中的eval()函数,eval()函数可以解析

Javascript 异步实现 & 事件循环

不问归期 提交于 2020-01-24 22:37:20
浏览器的进程和线程 一、js的单线程和异步 js的单线程(single threaded)和异步(asynchronous)两个基本矛盾的概念是怎么整合到js上的 首先必须肯定js本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的 宿主环境通过某种方式(事件驱动)使得js具备了异步的属性 二、浏览器的进程 浏览器的主进程 :负责协调、主控 第三方插件进程 :每种类型的插件对应一个进程,仅当使用该插件时才创建 GPU进程 :最多一个,用于3D绘制等 浏览器渲染进程 (浏览器内核):主要作用为页面渲染,脚本执行,事件处理等 三、浏览器内核线程 1、JS引擎线程 JS引擎一直等待着任务队列中任务的到来,然后加以处理 一个Tab页中无论什么时候都只有一个JS引擎在运行JS程序 2、GUI渲染线程 GUI渲染线程与JS引擎线程是互斥的 当JS引擎执行时GUI线程会被挂起 GUI更新会被保存在一个队列中等到JS引擎空闲时执行 3、定时器线程 传说中的setInterval与setTimeout所在线程 二者的定时计数功能不是由JS引擎完成的,而是通过 单独的线程 来完成的,从而保证计时准确 计时完毕,将回调添加到事件队列中,等待JS引擎空闲执行 4、事件触发线程 点击事件等会在对应条件触发的时候被添加到事件队列,等js引擎空闲执行

破解网站简单 js 加密 (一)

房东的猫 提交于 2020-01-24 22:09:02
问题描述 准备工作 首先将浏览器设置为禁止 js 加载的模式: 我们再次去请求相关的网站的时候就看不到 js 动态加载之后内容了。 正向推理 对于 script 里面的代码,第一段是一个 eval 函数的调用。 第二行是一大段的代码,先将第一段的代码复制出来,在控制台将 eval 替换为 console.log 即可。 我们将运行的结果复制下来: var dynamicurl="/WZWSREL2dvdXRvbmdqaWFvbGl1LzExMzQ1Ni8xMTM0NjkvMTEwNDAvaW5kZXgxLmh0bWw="; var wzwsquestion="{H0Od9evT@es_"; var wzwsfactor="5967"; var wzwsmethod="WZWS_METHOD"; var wzwsparams="WZWS_PARAMS"; 看起来是在 js 中定义的几个变量。 我们对第二段代码做一个 js 的美化, 查找一下 js 美化的网站: 随便选择一个,将第二段代码复制进去: 将格式化后的代码保存在一个全新的 js 文件中: 先看其中的 var _0x56ae … ,定义了一个函数,不难发现,这个函数在整个代码中有极多次被调用的经历。 这其实是一个还原字符串的函数。 具体的实现先不管,我们只要知道可以调用它实现一定的功能即可。 怎样验证呢?就是将这个函数复制到

js keyup、keypress和keydown事件 详解

血红的双手。 提交于 2020-01-24 21:28:01
js keyup、keypress和keydown事件 详解 js keyup、keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件。 keydown event keypress event keyup event keydown事件发生在键盘的键被按下的时候,接下来触发 keypress事件。 keyup 事件在按键被释放的时候触发。 这三个事件在页面中的使用方法如下例: <input id="testkeyevent" name="testkeyevent" onKeyUp ="keyup()" /> <input id="testkeyevent" name="testkeyevent" onkeypress ="keypress()" /> <input id="testkeyevent" name="testkeyevent" onkeydown ="keydown()" /> 对应的js函数: function keyup(){ ...} function keypress(){ ...} function keydown(){ ...} 注意: KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发KeyUp事件。

[JS] 第十课:数组

依然范特西╮ 提交于 2020-01-24 21:00:53
1. 数组的创建 通过构造函数创建数组 var array = new Array ( ) ; //------>创建一个空数组 var array = new Array ( 2 ) ; //------>创建一个长度为2的数组 var array = new Array ( 1 , 2 , 3 ) ; //------>创建一个为[1,2,3]的数组 使用数组字面量创建数组 var array = [ ] ; var array = [ 1 , 2 , 3 ] ; ⚠️ 一个数组里的元素可以是不同类型。 2. 数组构造函数上的方法 Array.isArray(arg) 功能:检测传入的参数是否为数组 返回值:布尔值 Array . isArray ( [ ] ) ; //true Array . isArray ( { name : "Tom" } ) ; //false Array.from(itms[,mapfn[,thisarg]]) 功能:从类似于数组的非数组元素或可迭代对象创建一个数组 参数: -itms:想要转化为数组的为数组对象或可叠戴对象 -mapfn:回调函数,新数组中的每个元素会执行,数组中的元素变为执行后的返回值,可选。(该函数包含两个参数: item –数组中当前正在处理的元素; index –正在处理的当前元素的索引) -thisarg

js中const,var,let区别

心已入冬 提交于 2020-01-24 20:41:18
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章。主要内容是:js中三种定义变量的方式const, var, let的区别。 1.const定义的变量不可以修改,而且必须初始化。 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//有输出值 4 // b = 5; 5 // console.log('函数外修改const定义b:' + b);//无法输出 2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。 1 var a = 1; 2 // var a;//不会报错 3 console.log('函数外var定义a:' + a);//可以输出a=1 4 function change(){ 5 a = 4; 6 console.log('函数内var定义a:' + a);//可以输出a=4 7 } 8 change(); 9 console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4 3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。 1 let c = 3; 2 console.log('函数外let定义c:' + c);//输出c=3 3 function change()

js 条件语句&循环语句

一笑奈何 提交于 2020-01-24 18:58:14
条件语句 1.三种 if 语句 if(隐式转换为布尔值){} if () {} else {} if () {} else if() {} 条件中的结果不是 “”,false,0,NaN,undefined,null就可以进入条件; 如果条件语句块只有一句话的时候,可以省略{}; 配合函数中的return将会很少使用到if else if . 2.switch开关语句 判断switch()中表达式是否(绝对===)等于case后的值 var s = 10 ; switch ( s % 10 ) { case 1 : break ; case 2 : break ; case 0 : document . write ( "switch常用语法格式" ) ; break ; default : break ; } switch 穿越 break作用是跳出switch语句块,break后面的语句块将不再执行; 但是如果没有break,仍然在不判断结果的情况下执行一个case的语句块,这叫穿越. switch 或者穿越 var s = 10 ; switch ( s % 10 ) { case 0 : case 1 : case 2 : case 3 : case 4 : s ++ ; break ; } console . log ( s ) ; //只要条件匹配

从0开发3D引擎(七):学习Reason语言

烂漫一生 提交于 2020-01-24 18:26:46
目录 上一篇博文 下一篇博文 介绍Reason Reason的优势 如何学习Reason? 介绍Reason的部分知识点 大家好,本文介绍Reason语言以及学习Reason的方法。 上一篇博文 从0开发3D引擎(六):函数式反应式编程及其在引擎中的应用 下一篇博文 从0开发3D引擎(八):准备“搭建引擎雏形” 介绍Reason Reason又叫Reasonml,是在Ocaml语言的基础上修改而来,由Facebook ReactJs的开发组开发和维护。 Reason是函数式编程语言,由Bucklescript编译器将其编译为 java script语言。 Reason是专门提供给前端开发者使用的,相对于Ocaml,语法上与javascript更为接近。 Reason的优势 1、从“发展前景”来说: 1)大公司Facebook出品,质量、稳定性、后续维护升级有保证 2)Reason是基于OCaml的,因此随着Ocaml的版本更新,Reason和Bucklescript也会支持Ocaml的新特性 3)函数式编程越来越火,它也在3D引擎中越来越多地使用(如Frostbite公司提出的Frame Graph架构和Data Oriented思想都需要结合函数式编程) 2、从“性能”来说: 1)Reason支持mutable的操作和数据结构 可在性能热点处使用它们,提高性能 2

JS滚轮事件(mousewheel/DOMMouseScroll)了解 -2014

◇◆丶佛笑我妖孽 提交于 2020-01-24 17:08:06
by zhangxinxu from http://www.zhangxinxu.com 本文地址: http://www.zhangxinxu.com/wordpress/?p=3175 一、学无止境、温故知新 //zxx: 本段与技术无关,一些很个人的吐槽,可以跳过 已经没有了小学生时代过目不忘的记忆力了,很多自己折腾的东西、接触的东西,短短1年之后就全然不记得了。比方说,完全记不得获取元素与页面距离的方法( getBoundingClientRect ),或者是不记得现代浏览器下触发DOM自定义事件的方法( dispatchEvent ). 显然,适当的温习,翻阅以前的东西,或者自己空余时间处理相关的东西还是有必要的。其实,细想,东西记不住是自己自身原因,在折腾的时候就没有想方设法牢记(而不是通过反复使用记住)。比方说 getBoundingClientRect 就是“得到客户端矩形边界”的意思,或者使用邪恶记法记住“割( g )逼( b )艹( c )软( r )”。 dispatchEvent 方法使用“ 3 步走”,“创建( createEvent )-初始( init*Event )-分派( dispatchEvent )”。 学习的脚步不能停止。一站到底的那些“变态”们也有不知道的东西,显然,我们这些草辈,尤其年轻的自己,不知道的更多