天道酬勤,学无止境

javascript

moment.js date validation from array of formats

问题 我需要测试正确日期格式的输入。 我想接受几种日期格式,所以我创建了一个验证函数来测试至少一种格式是否正常,在这种情况下返回 true。 我使用 moment.js 来测试日期。 当我简单地使用硬编码字符串日期格式键入条件时,该函数可以正常工作: var multiDateValidator = function (value) { if ((moment(value, 'DD/MM/YYYY', true).isValid()) || (moment(value, 'D/M/YYYY', true).isValid()) || (moment(value, 'DD.MM.YYYY', true).isValid()) || (moment(value, 'D.M.YYYY', true).isValid()) || (moment(value, 'DD. MM. YYYY', true).isValid()) || (moment(value, 'D. M. YYYY', true).isValid())) { return true; } return false; }; 但是如果我想使用允许的日期格式列表,它就不起作用,它永远不会返回 true。 var allowedDateFormats = ['DD/MM/YYYY', 'D/M/YYYY', 'DD.MM.YYYY

2022-07-11 10:01:53    分类:技术分享    javascript   momentjs

How does Javascript implement date comparison operator?

问题 这个答案说, Date 对象会做你想做的事 - 为每个日期构造一个,然后使用> 、 < 、 <=或>=比较它们。 我没有在引用的页面上看到此功能。 这是特定于浏览器的行为,还是语言的标准特性? 如果 Date 是一个 javascript“对象”,并且 javascript 不支持运算符重载,那么 Date 对象上的> 、 < 、 <=或>=运算符的这种行为是如何实现的? 我的意思是,它是否在Date.prototype上定义,是否因为定义了一些隐式转换(例如从对象到数字或字符串)而发生,它是否是添加到 Javascript 语言解释器/运行的 Date 对象的特例-时间,还是什么? 回答1 每当您使用通常期望数字(加法、减法、较大/较小比较)的对象时,都会调用valueOf方法将对象转换为原语: { valueOf: () => 2 }.valueOf() // 2 //or not explicitly called: + { valueOf: () => 2 } // 2 //using the compare operator: { valueOf: () => 2 } < { valueOf: ()=>3 } //true as 2 < 3 因此,当您比较日期时,也会发生这种情况。 由于Date.prototype.valueOf方法返回自 1970 年以来的毫秒数

2022-07-11 10:00:22    分类:技术分享    javascript   datetime   operator-overloading   operators

Why is indexOf(char) is 0 if the value exists? [duplicate]

问题 这个问题在这里已经有了答案: indexOf中的0是什么意思? (1 个回答) 5年前关闭。 为什么firstHalf.indexOf(secondHalfArr[i]) 0 ? "use strict"; let word = "9999999999", len = word.length, oddSecondHalfStarter = (len % 2 == 0) ? len / 2 : 1 + len / 2, firstHalf = word.substr(0, len / 2), secondHalf = word.substr(oddSecondHalfStarter, len), firstHalfArr = word.substr(0, len / 2).split(''), secondHalfArr = word.substr(oddSecondHalfStarter, len).split(''), firstHalfLength = firstHalf.length, secondHalfLength = secondHalf.length, charsToReplace = 0; for (let i = 0; i < firstHalfLength; i++) { if (firstHalf.indexOf(secondHalfArr[i]) <

2022-07-11 09:59:36    分类:技术分享    javascript   arrays   ecmascript-6   strict

How to get specific cookie value in socket.io

问题 我现在可以使用socket.request.headers.cookie显示所有 cookie。 当我控制台输出是这样的 PHPSESSID=mtklg8k81cpkop5ug6aechbb34; user=77; io=1Klg6xgTRXhb2OWiAAAA 我怎样才能只获得 77 的用户价值? 下面的代码给我一个未定义的错误 var cookief = socket.request.headers.cookie; console.log(cookief['user']); 回答1 您必须将 cookie 解析为它们单独的 cookie 和属性。 通常使用的模块是 cookie-parser。 要与 socket.io 一起使用,您可以使用一个小的包装器来与 socket.io 一起使用,称为 socket.io-cookie-parser。 const cookieParser = require('socket.io-cookie-parser'); io.use(cookieParser()); io.on('connection', function(socket) { // access socket.request.cookies console.log(socket.request.cookies['user']; });

2022-07-11 09:59:07    分类:技术分享    javascript   node.js   cookies   socket.io

Javascript - How do I find out which condition(s) triggered? [duplicate]

问题 这个问题在这里已经有了答案: 如何知道 if 语句中哪个条件为真? (2 个回答) 5年前关闭。 假设我有以下声明: if (height > 4.25 || length > 6 || weight > 1) { //Do Something } 有没有办法判断满足哪些条件才能使该陈述成立? 比下面更优雅的东西,这显然是多余的: if (height > 4.25 || length > 6 || weight > 1) { if (height > 4.25){...}; if (length > 6){...}; if (weight > 1){...}; } 回答1 不可能! 您必须在单独的条件下检查每个选项: if (height > 4.25 || length > 6 || weight > 1) { if(height > 4.25){ return true; } if(length > 6){ return true; } if (weight > 1){ return true; }; } 即便如此,您也不知道当高度大于 4.25 时长度是否不大于 6,要知道这些,您必须检查所有可能的组合: if (height > 4.25 || length > 6 || weight > 1) { if(height > 4.25 && length > 6 &&

2022-07-11 09:58:40    分类:技术分享    javascript

checkbox property check value not updating in knockout js

问题 我正在使用 Knockout.js。 我有一个页面,其中有三个复选框及其在foreach循环下。 这是我的代码: <div class="form-horizontal" id="ko-bind-element"> <input type="hidden" id="serverJSON" value="@Newtonsoft.Json.JsonConvert.SerializeObject(Model)" /> <div data-bind="foreach: procedures"> <div data-bind="template: { name: Mode(), data: $data }"></div> </div> </div> <script type="text/html" id="procedure"> <table class="table table-bordered"> <tr> <td class="col-md-3"><span data-bind="text: Name"></span> </td> <td> <input type="checkbox" data-bind="attr: { name: (VId.length > 0) ? VId : Name },checked: AlreadyCompleted" /> </td> <td>

2022-07-11 09:58:29    分类:技术分享    javascript   jquery   checkbox   knockout.js

Benefit of const vs let in TypeScript (or Javascript)

问题 我正在阅读 TypeScript Deep Dive,我发现let和const都是块作用域的,这很棒。 显然,一个 const 不能改变(它是不可变的)。 但是为什么 ReSharper 鼓励我尽可能多地let更改为const呢? 我假设 ReSharper 认为使用const而不是let可以提高性能? const和let之间有速度差异吗? 使用const有不同的理由吗? 举个例子: for (let i = 0; i < this.InputControl.ParentQuestions.length; i++) { const id = this.InputControl.ParentQuestions[i].ParentId; const value = this.InputControl.ParentQuestions[i].ParentRequiredAnswer; if (!formVals[id]) return false; if (formVals[id].toLowerCase() != value.toLowerCase()) return false; } 以前,我有let id和let value但 ReSharper 要求我将它们更改为const ,这可行,但为什么在这种情况下更好? 或者无论如何? 我也在 SO 上找到了这个问题

2022-07-11 09:57:39    分类:技术分享    javascript   typescript   resharper

How to substring in jquery

问题 var name = "nameGorge"; //output Gorge 回答1 不需要 jQuery! 只需使用 substring 方法: var gorge = name.substring(4); 或者,如果您要删除的文本不是静态的: var name = 'nameGorge'; var toRemove = 'name'; var gorge = name.replace(toRemove,''); 回答2 使用 .split()。 (第二个版本在 Array 上使用 .slice() 和 .join()。) var result = name.split('name')[1]; var result = name.split('name').slice( 1 ).join(''); // May be a little safer 使用 .replace()。 var result = name.replace('name',''); 在字符串上使用 .slice()。 var result = name.slice( 4 ); 回答3 标准 javascript 将使用以下语法执行此操作: string.substring(从,到) var name = "nameGorge"; var output = name.substring(4)

2022-07-11 09:54:28    分类:技术分享    javascript   jquery   string

Automatically force mobile browser to desktop view

问题 在使用 Paypal IPN 发起付款的项目上完成了大量工作后,我发现这在桌面浏览器上是成功的,但在移动设备上完全 100% 失败(至少在 Chrome 上)。 经过一番研究,我发现这是由于移动浏览器使用 GET 方法返回 Paypal 数据,而不是桌面使用 POST。 如果我在移动浏览器上单击“请求桌面视图”,那么这将允许该过程正确完成,但这对于最终用户来说显然不是很有趣。 所以,当我遇到这个问题时(我实际上已经被告知这是一个无法控制的 Paypal 问题 - 不确定是否属实),有没有办法自动强制桌面在移动浏览器上查看作为最后的手段? 我试图改变视口宽度( <meta name="viewport" content="width=1024"> ),但这所做的只是扩大移动浏览器视图。 它实际上并没有像手动单击“请求桌面视图”那样提供正确的桌面视图。 请问有人知道是否有办法通过 HTML 或 JS 强制进入桌面视图吗? 谢谢, 担。 回答1 通常<meta name="viewport" content="width=1024">在某些情况下就足够了。 但是如果你有mobile版和desktop版的单独索引,那么你可以使用这个脚本: function parseUA() { var u = navigator.userAgent; var u2 = navigator

2022-07-11 09:54:20    分类:技术分享    javascript   jquery   html   mobile