格式
<script>
JS代码
</script>
作用
示例
<script>
JS代码
</script>
type="text/javascript",设置内部代码类型,这里代表内部是文本JavaScript代码,可以省略。
格式
<script type="text/javascript" src="外部.js文件">
</script>
作用
示例
创建外部.js文件
html页面引用外部js文件
<script src="js/out.js" type="text/javascript"></script>
<script type="text/javascript">代码</script>
注意事项
<script src="js/out.js" type="text/javascript">无效的js代码编写位置</script><script src="js/out.js" type="text/javascript/>"使用window.alert()写入警告框
使用document.write()写入HTML输出
使用consle.log()写入浏览器控制台
window.alter("hello JS"); // 弹出警告框
document.write("hello js"); // 写入HTML
consle.log("hello Js"); // 写入控制台
var 变量名 = 变量值;let 变量名 = 变量值;const 变量名 = 常量值;let关键字来定义变量,它的用法类似于var,但是所有声明的变量,只在let关键字所在的代码块内有效,且不允许重复声明const关键字,用来声明一个只读的常量。一旦声明,常量的值就不能被改变。| 类型 | 说明 |
|---|---|
| numbr | 数值型:包含整数、小数 |
| boolean | 布尔型:包含true/false |
| string | 字符串:包含字符和字符串 |
| object | 对象类型:包含系统内置对象和用户自定义的对象,NULL也是对象 |
| undefined | 未定义类型:未知的类型,没有使用=号赋值 |
查询变量名所属类型函数
typeof 变量名typeof(变量名)算术运算符用于执行两个变量或值的算术运算,例如:let a=5, b=10;
| 运算符 | 说明 | 表达式 | 值 |
|---|---|---|---|
| + | 加法 | a + b | 15 |
| - | 减法 | a - b | -5 |
| * | 乘法 | a * b | 50 |
| / | 除法 | a / b | 0.5 |
| % | 余数(取模) | a % b | 5 |
| ++ | 自增 | a++ | 6 |
| -- | 自减 | a-- | 4 |
注意事项
赋值运算符用于给JavaScript变量赋值,例如 let a = 5, b = 10;
| 运算符 | 说明 | 表达式 | 值 |
|---|---|---|---|
| = | 等于 | a = b | 10 |
| += | 加等于 | a += b | 15 |
| -= | 减等于 | a -= b | -5 |
| *= | 乘等于 | a *= b | 50 |
| /= | 除等于 | a /= b | 0.5 |
| %= | 余等于 | a %= b | 5 |
比较运算符用于逻辑语句的判断,从而确定给定的两个值或变量是否相等,例如 let a = 5, b = 10;
| 运算符 | 说明 | 表达式 | 值 |
|---|---|---|---|
| == | 等于(比较值,不比较类型) | a=5,b="5" | true |
| === | 恒等于(比较值和类型) | a=5,b="5" | false |
| > | 大于 | a > b | false |
| < | 小于 | a < b | true |
| >= | 大于或等于 | a >= b | false |
| <= | 小于或等于 | a <= b | true |
| != | 不等于 | a != b | true |
| !== | 恒不等于 | a !== b | true |
字符串于数字进行比较的时候会先把字符串转换成数字然后再进行比较
逻辑运算符用来确定变量或值之间的逻辑关系,支持短路运算,例如,let a = true, b = false;
| 运算符 | 说明 | 表达式 | 值 |
|---|---|---|---|
| && | 与 | a && b | false |
| || | 或 | a || b | true |
| ! | 非 | !a | false |
注意事项
if 语句
if (条件表达式){
// 代码块;
}
if...else语句
if (条件表达式) {
// 代码块;
} else {
// 代码块;
}
if...else if ...else语句
if (条件表达式) {
// 代码块;
} else if (条件表达式) {
// 代码块;
} else {
// 代码块;
}
if语句表达式
if语句表达式除了支持boolean类型表达式,还支持非boolean类型表达式
| 数据类型 | 为真 | 为假 |
|---|---|---|
| number | 非0 | 0 |
| string | 非空字符串 | 空字符串 |
| undefined | 假 | |
| NaN(Not a Number) | 假 | |
| object | 对象不为null | null |
switch语句
switch (变量名) {
case 常量值:
break;
case 常量值:
break;
default:
break;
}
while循环语句语法(条件为true时循环)
while (条件表达式) {
需要执行的代码;
}
do-while 循环语法(最少执行1次循环)
do {
需要执行的代码;
} while (条件表达式);
break和continue
ES6普通次数for循环语法
for (let i=0; i<length; i++) {
循环体需要执行的代码;
}
ES6增强for循环语法
for (let 变量 of 数组) {
循环体需要执行的代码;
}
函数介绍
函数分类
命名函数:有名字的函数
function 函数名(形参列表) {
// 要执行的代码块
}
function add(a, b) {
return a + b;
}
let sum = add(1, 2);
匿名函数:没有名字的函数
// 定义匿名函数
let 函数名 = function(形参列表) {
// 要执行的代码块
}
// 调用匿名参数
let add = function (a, b) {
return a + b;
}
let sum = add(2, 3);
JavaScript Array对象用于定义数组
格式
let 变量名 = new Array(元素列表); // 方式一
let 变量名 = [元素列表]; // 方式二
demo
let arr = new Array(1,2,3);
let arr = [1,2,3];
访问方式
arr[索引] = 新的值;
arr[0] = 1;
注意事项
Array对象属性
| 属性 | 描述 |
|---|---|
| constructor | 返回对创建此对象的数组函数的引用 |
| length | 设置或返回数组中元素的数目 |
| prototype | 使您有能力向对象添加属性和方法 |
Array对象方法
| 方法 | 描述 |
|---|---|
| concat() | 连接两个或更多的数组,并返回结果 |
| join() | 把数组的所有元素放入一个字符串,元素通过指定的分隔符进分隔 |
| pop() | 删除并返回数组的最有一个元素 |
| push() | 向数组的末尾添加一个或更多元素,并返回新的长度 |
| reverse() | 颠倒数组中元素的顺序 |
| shift() | 删除并返回数组的第一个元素 |
| slice() | 从某个已有的数组返回选定的元素 |
| sort() | 对数组的元素进行排序 |
| splice() | 删除元素,并向数组添加新元素 |
| toSource() | 返回该对象的源代码 |
| toString() | 把数组转换为字符串,并返回结果 |
| toLocaleString() | 把数组转换为本地数组,并返回结果 |
| unshift() | 向数组的开头添加一个或更多元素,并返回新的长度 |
| valueOf() | 返回数组对象的原始值 |
let 变量名 = new String(s);//方式一
let str = new String("hello");let 变量名 = s; // 方式二
let str = "hello";let str = 'hello';格式
let 对象名称 = {
属性名称1: 属性值1,
属性名称2: 属性值2,
...
函数名称: function (形参列表) {}
...
};
let person = {
name: "zhangsan",
age: 23,
eat: function () {
alert("干饭~");
}
};
使用BOM,开发者可以操控浏览器显示页面之外的部分。
弹出新浏览器窗口的能力
移动、缩放和关闭浏览器窗口的详尽信息
navigator对象,提供关于浏览器的详尽信息
location对象,提供浏览器加载页面的详尽信息
screen对象,提供关于用户屏幕分辨率的相近信息
performance对象,提供浏览器内存占用、导航行为和时间统计的相近信息。
对cookie的支持
window:表示浏览器窗口对象
| window中与对话框有关的方法 | 作用 |
|---|---|
| alert("提示信息") | 弹出一个信息框,只有一个确定按钮 |
| string prompt("提示信息", "默认值") | 弹出一个输入框,可以输入默认值 |
| boolean confirm | 弹出一个确认框,有确定和取消两个按钮,点确认返回true,点取消返回false |
| window中的方法 | 作用 |
|---|---|
| setTimeout(函数名,间隔毫秒数) | 过一段时间调用一次指定的函数,只调用一次,方法的返回值就是计时器 |
| setInterval(函数名,建个号描述) | 每隔一段时间调用一次指定的函数,方法的返回值就是计时器 |
location:表示地址栏对象
| 属性 | 功能 |
|---|---|
| href | 获取:返回完整的URL;设置:跳转到一个新的页面 |
history:表示浏览器历史记录对象
| 方法 | 作用 |
|---|---|
| forward() | 相当于浏览器上前进按钮,如果浏览器上按钮不可用,这个方法就不起作用 |
| back() | 相当于浏览器上的后退按钮 |
注意事项

| 获取元素的方法 | 作用 |
|---|---|
| document. getElementById("id") | 通过id获取一个元素 |
| document.getElementsByTagName("标签名") | 通过标签名获取一组元素 |
| document.getElementsByName("Name") | 通过name属性获取一组元素 |
| document.getElementsByClassName("类名") | 通过样式类名获取一组元素 |
方式一:命名函数
通过标签终的事件属性进行绑定:如<button type="button" onlick="abc()"></button>
<script>
function abc() {
alert("你点我?!命名函数设置的事件")
}
方式二:匿名函数
通过DOM元素属性绑定:如<input type="button" id="btn"
<script>
document.getElementById("btn").onclick = function() {
alert("我被点了,嘤嘤嘤");
}
</script>
| 事件名 | 说明 |
|---|---|
| onload | 某个页面或图像被完成加载 |
| onsubmit | 当表单提交时触发该事件 |
| onclick | 鼠标单击事件 |
| ondbclick | 鼠标双击事件 |
| onblur | 元素失去焦点(鼠标不在元素的位置) |
| onfocus | 元素获得焦点 |
| onchange | 用户改变域的内容 |
正则表达式概念
正则表达式语法
| 语法 | 作用 |
|---|---|
| ^ | 表示开始 |
| $ | 表示结束 |
| [] | 表示某个范围内的单个字符,比如[0-9]单个数字字符 |
| . | 表示任意单个字符,除了换行和行结束符 |
| \w | 表示单词字符:字母、数字、下划线(_),相当于[A-Za-z0-9] |
| \d | 表示数字字符:相当与[0-9] |
| 量词 | 意义 |
|---|---|
| + | 至少一个 |
| * | 零个或多个 |
| ? | 零个或一个 |
| x个 | |
| 至少m个 | |
| 至少m个,最多n个 |
在JS中的定义
let reg = new RegExp("1[3456789]\\d{9}");let reg = /^1[3456789]\d{9}/;方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎注册</title>
<style>
* {
margin: 0;
padding: 0;
list-style-type: none;
}
.reg-content{
padding: 30px;
margin: 3px;
}
a, img {
border: 0;
}
body {
background-image: url("./img/reg_bg_min.jpg") ;
text-align: center;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
td, th {
padding: 0;
height: 90px;
}
.inputs{
vertical-align: top;
}
.clear {
clear: both;
}
.clear:before, .clear:after {
content: "";
display: table;
}
.clear:after {
clear: both;
}
.form-div {
background-color: rgba(255, 255, 255, 0.27);
border-radius: 10px;
border: 1px solid #aaa;
width: 424px;
margin-top: 150px;
margin-left:1050px;
padding: 30px 0 20px 0px;
font-size: 16px;
box-shadow: inset 0px 0px 10px rgba(255, 255, 255, 0.5), 0px 0px 15px rgba(75, 75, 75, 0.3);
text-align: left;
}
.form-div input[type="text"], .form-div input[type="password"], .form-div input[type="email"] {
width: 268px;
margin: 10px;
line-height: 20px;
font-size: 16px;
}
.form-div input[type="checkbox"] {
margin: 20px 0 20px 10px;
}
.form-div input[type="button"], .form-div input[type="submit"] {
margin: 10px 20px 0 0;
}
.form-div table {
margin: 0 auto;
text-align: right;
color: rgba(64, 64, 64, 1.00);
}
.form-div table img {
vertical-align: middle;
margin: 0 0 5px 0;
}
.footer {
color: rgba(64, 64, 64, 1.00);
font-size: 12px;
margin-top: 30px;
}
.form-div .buttons {
float: right;
}
input[type="text"], input[type="password"], input[type="email"] {
border-radius: 8px;
box-shadow: inset 0 2px 5px #eee;
padding: 10px;
border: 1px solid #D4D4D4;
color: #333333;
margin-top: 5px;
}
input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {
border: 1px solid #50afeb;
outline: none;
}
input[type="button"], input[type="submit"] {
padding: 7px 15px;
background-color: #3c6db0;
text-align: center;
border-radius: 5px;
overflow: hidden;
min-width: 80px;
border: none;
color: #FFF;
box-shadow: 1px 1px 1px rgba(75, 75, 75, 0.3);
}
input[type="button"]:hover, input[type="submit"]:hover {
background-color: #5a88c8;
}
input[type="button"]:active, input[type="submit"]:active {
background-color: #5a88c8;
}
.err_msg{
color: red;
padding-right: 170px;
}
#password_err,#tel_err{
padding-right: 195px;
}
#reg_btn{
margin-right:50px; width: 285px; height: 45px; margin-top:20px;
}
</style>
</head>
<body>
<div class="form-div">
<div class="reg-content">
<h1>欢迎注册</h1>
<span>已有帐号?</span> <a href="#">登录</a>
</div>
<form id="reg-form" action="register" method="get">
<table>
<tr>
<td>用户名</td>
<td class="inputs">
<input name="username" type="text" id="username" onblur="checkUserName()">
<br>
<span id="username_err" class="err_msg" style="display: none">用户名格式不对</span>
</td>
</tr>
<tr>
<td>密码</td>
<td class="inputs">
<input name="password" type="password" id="password">
<br>
<span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
</td>
</tr>
<tr>
<td>手机号</td>
<td class="inputs">
<input name="tel" type="text" id="tel" onblur="checkPhoneNumber()">
<br>
<span id="tel_err" class="err_msg" style="display: none">手机号格式有误</span>
</td>
</tr>
</table>
<div class="buttons">
<input value="注 册" type="submit" id="reg_btn">
</div>
<br class="clear">
</form>
</div>
<script>
// 校验用户名
// 1. 首先需要定位到username那一栏,然后考虑聚焦和非聚焦问题,然后根据获取到的value值进行正则表达式匹配的判断
function checkUserName() {
let username = document.getElementById("username").value;
// 用户名规则
// 第一种创建正则表达式的方法
// let rule = new RegExp("^$");
// 第二种创建正则表达式的方法
// let rule = /^$/;
let rule = /^\w{5,8}$/;
// 比较结果
let result = rule.test(username);
if (result) {
// window.alert("you are right");
// 聚焦离开后,如果符合正则表达式规则,则什么都不显示
document.getElementById("username_err").style.display = "none";
} else {
// 否则,提示用户输入的格式错误
// window.alert("you are wrong");
document.getElementById("username_err").style.display = "";
}
return result;
}
// 校验手机号
function checkPhoneNumber() {
// 获取手机号
let phoneNumber = document.getElementById("tel").value;
// 定义规则
let rule = /^1[3456789]\d{9}$/;
// 比较结果
let result = rule.test(phoneNumber);
if (result) {
// 如果符合规则,那么就不显示错误提示
document.getElementById("tel_err").style.display = "none";
} else {
// 如果不符合规则,那么就应该显示错误提示
document.getElementById("tel_err").style.display = "";
}
return result;
}
// onsubmit事件:当点击提交按钮表单准备提交时执行
// 在提交表单的时候,需要进行一次验证,否则如果不进行验证的话,在用户没有填写任何信息的时候也是能直接进行登录的
// 在表单标签的submit功能上,可以进行限制,当onsubmit等于false的时候不能提交,当为true的时候提交
// 定位到表单标签
document.getElementById("reg-form").onsubmit = function () {
return checkUserName() && checkPhoneNumber();
}
</script>
</body>
</html>
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
(本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展 是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。 如:有三个人,每个人做的不同的事物,但是是需要协作的完成。 而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click