在 JavaScript 中,有几种常见的方式可以为变量或函数参数设置默认值:
1. 逻辑或操作符 || (传统方式)
let name = userInput || '默认姓名';
当 userInput 为 falsy 值(如 null, undefined, '', 0, false, NaN)时使用默认值
缺点:会覆盖所有 falsy 值,有时可能不符合预期
2. 空值合并操作符 ?? (ES2020)
let name = userInput ?? '默认姓名';
只在 userInput 为 null 或 undefined 时使用默认值
不会覆盖其他 falsy 值(如 0, false, '')
...
Promise 是 JavaScript 中用于处理异步操作的对象。new Promise((resolve, reject) => { ... }) 是创建 Promise 的基本语法。下面详细介绍其使用方法:
基本语法
const myPromise = new Promise((resolve, reject) => {
// 异步操作代码
if (/* 操作成功 */) {
resolve(value); // 成功时调用,传递结果值
} else {
reject(error); // 失败时调用,传递错误信息
}
});
使用方法
1. 创建 Promise
const promise = new Promise((resolve, reject) => {
// 模拟异步操作
setTimeout(() => {
const randomNumber = Math.random();
if (randomNumber &...
在 JavaScript 中,有几个内置函数可以用于 URL 编码和解码:
编码函数
encodeURI()
对整个 URI 进行编码
不会编码:A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
用于编码整个 URL
const url = "https://example.com/测试路径?name=值&age=20";
console.log(encodeURI(url));
// 输出: "https://example.com/%E6%B5%8B%E8%AF%95%E8%B7%AF%E5%BE%84?name=%E5%80%BC&age=20"
encodeURIComponent()
对 URI 的组件部分进行编码
不会编码:A-Z a-z 0-9 - _ . ! ~ * ' ( )
用于编码查询参数等...
在 PHP 中解压缩 Gzip 文件有几种方法,以下是常用的几种方式:
方法一:使用 gzdecode() 函数
$compressedData = file_get_contents('compressed_file.gz');
$uncompressedData = gzdecode($compressedData);
file_put_contents('uncompressed_file.txt', $uncompressedData);
方法二:使用 zlib 扩展
// 打开 gzip 文件
$gz = gzopen('compressed_file.gz', 'rb');
$uncompressedData = '';
// 读取并解压缩
while (!gzeof($gz)) {
$uncompressedData .= gzread($gz, 4096);
}
gzclose($gz);
file_put_contents('uncompressed_file.txt', $uncompressedData);
方法三:使用 file_get_contents...
方法 1:使用 getElementsByTagName 获取所有 <table>
$html = <<<HTML
<div id="out">
<span id="oddsTable"></span>
<table cellpadding="0" cellspacing="0" border="0" width="900" align="center">第一个表格...</table>
<table cellpadding="0" cellspacing="0" border="0" width="900" align="center">第二个表格...</table>
</div>
HTML;
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 忽略 HTML 解析错误
$dom->loadHTML($html);
libxml_clear_errors();
// 获取所有 ...
基本方法
const arr = [1, 2, 3, 4, 5];
// 1. 使用reduce方法
const average = arr.reduce((sum, num) => sum + num, 0) / arr.length;
console.log(average); // 输出: 3
// 2. 使用for循环
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
const avg = sum / arr.length;
console.log(avg); // 输出: 3
处理空数组
为了避免除以0的错误,可以添加检查:
function getAverage(arr) {
if (arr.length === 0) return 0; // 或者抛出错误/返回其他默认值
return arr.reduce((a, b) => a + b) / arr.length;
}
console.log(getAverage([])); // 输出: 0
更简...
1. 使用 split() 方法
split() 方法是最常用的将字符串分割为数组的方法。
const str = "Hello,World,JavaScript";
const arr = str.split(","); // 按逗号分割
console.log(arr); // ["Hello", "World", "JavaScript"]
// 按每个字符分割
const str2 = "hello";
const arr2 = str2.split("");
console.log(arr2); // ["h", "e", "l", "l", "o"]
2. 使用扩展运算符 (...)
ES6 的扩展运算符可以将可迭代对象(如字符串)展开为数组。
const str = "hello";
const arr = [...str];
console.log(arr); // ["h", "e", "l", "l", "o"]
3. 使用 Array.from() 方法
Array.from...
JavaScript 保留两位小数的方法
在 JavaScript 中有多种方法可以将数字保留两位小数,以下是几种常用的方法:
1. 使用 toFixed() 方法
let num = 123.45678;
let result = num.toFixed(2); // "123.46" (返回的是字符串)
注意:toFixed() 返回的是字符串,如果需要数字可以再转换:
let numResult = parseFloat(num.toFixed(2)); // 123.46 (数字)
2. 使用 Math.round() 方法
let num = 123.45678;
let result = Math.round(num * 100) / 100; // 123.46 (数字)
3. 使用 Number.EPSILON 避免舍入误差
let num = 123.45678;
let result = Math.round((num + Number.EPSILO...
如果您忘记了 MySQL 5.7 的 root 密码,可以按照以下步骤重置密码:
Windows 系统解决方法
方法一:使用 --init-file 方法(推荐)
停止 MySQL 服务:
net stop mysql
(如果服务名不是mysql,请使用您的实际服务名)
创建一个文本文件 C:mysql-init.txt,内容为:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
以管理员身份运行CMD,执行:
mysqld --init-file=C:mysql-init.txt --console
启动成功后,按 Ctrl+C 停止,然后正常启动MySQL服务:
net start mysql
删除或重命名 C:mysql-init.txt...
<script type="text/javascript" src="https://cdn.staticfile.net/jquery/3.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.staticfile.net/clappr/0.4.7/clappr.min.js"></script>
<div id="playerContainer" style="width:1024px;height:576px;"></div>
<input type="button" id="button_destroy" name="button_destroy" value="销毁播放器" />
<script type="text/javascript">
<!--
var playurl = 'test/test.mp4';
var myplayer = new Clappr.Player({
source: playurl,
poster: 'http://clappr.io/poster.png',
widt...
构思
由于互联网的机制,在不使用 Websocket 的情况下,是不能够长时间与用户持续保持连接的。所以我这里打算使用 COOKIE 与数据库信息进行校验。 其中用户端储存的 Token 是经过 hash 加密过的数据,数据库存储的数据是不经过 hash 加密的原始数据。最终通过一系列计算后使用 PHP 自带的 hash 校验函数进行 Token 验证。
为什么我前面说实现一端登录,另一端自动注销呢? Token 在执行登陆之前,会生成初始 Token 数据,这部分数据是没有经过加密而且没有进行组合的,存储在 SESSION 中。在用户执行登陆时候,自行生成4位随机数做基础计算数据,随后检查目前服务器时间戳与用户端生成的 Token 数据进行比对,以及获...
①第一种加密解密算法
<?php
function encryptDecrypt($key, $string, $decrypt){
if($decrypt){
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");
return $decrypted;
}else{
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
return $encrypted;
}
}
//加密:"z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4...
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否将响应结果存入变量,1是存入,0是直接echo
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);//在发起连接前等待的时间,如果设置为0,则无限等待。
curl_setopt($ch, CURLOPT_TIMEOUT, 15);//允许执行的最长秒数。
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);//伪造浏览器头信息
curl_setopt($ch, CURLOPT_REFERER,$_REFERER);//伪造来源页面
curl_setopt($ch, CURLOPT_URL, $url);
$htmlSource = curl_exec($ch);
//$h...
一个成功的INVITE请求(13节)既会创建一个基于两个用户之间的对话,也会基于请求/应答模式(offer-answer)创建一个会话。 12节讲述了如何通过target refresh 请求来修改一个现存的会话(比如,修改对话的remote target URI)。本节描述如何修改实际的会话(session)。 这个修改可以包括修改地址或者端口、增加媒体流、删除媒体流等等。这是通过发起新的INVITE请求来完成的,并且这个新的INVITE请求是基于建立会话所相同的对话的。在一个现存对话中发出INVITE请求就是re-INVITE. 注意,单个的re-INVITE请求可以同时更改对话和会话的参数。 呼叫方或者被叫方都可以更改现存的会话。...
SIP方法OPTIONS允许一个UA来查询另外一个UA或者proxy服务器的能力。这个提供个客户端一个手段来查询服务端支持的方法,内容类型,扩展,codecs等等。这些都不用”ringing”对方。比如,在客户端试图在INVITE请求头中增加一个请求字段选项的时候,它并不知道对方UAS能否支持这个选项,它就可以用OPTIONS来查询一下UAS,通过检查OPTIONS返回的Supported头域,就可以知道是否支持这个选项。所有的UA都必须支持OPTIONS方法。 OPTIONS请求的目标是用Request-URI指明的,这个既可以是一个UA也可以是一个SIP服务器。如果OPT...
INFO方法作为一个新的SIP方法是对SIP协议的扩展。 以下是一些INFO消息地可能应用: - 在PSTN网关之间传送 呼叫中 PSTN 信令消息 - 传送SIP会议中生成的 DTMF 数字。 - 传送 无线信号强度信息以支持无线移动应用。 - 传送 计算平衡信息. - 在会议的参加者之间传送...