本章没有深奥的讲解js一些底层原理,比如this指针、作用域、原型啦,涉及的都是一些有利于平时开发时简化代码,提高执行效率,或者说可以当做一种经验方法来使用,篇幅都不长,小步快跑的让你阅读完整篇文章,体验编程的快乐。
获取两个区间之内随机数
function getRandomNum(Min, Max){ // 获取两个区间之内随机数
// @逆火狂飙 提出有可能第一个参数大于第二个参数,所以增加一下判断更可靠
if (Min > Max)
Max = [Min, Min = Max][0]; // 快速交换两个变量值
var Range = Max - Min + 1;
var Rand = Math.random();
return Min + Math.floor(Rand * Range);
};
随机返回一个 正/负参数
function getRandomXY(num){ // 随机返回一个 正/负参数
num = new Number(num);
if (Math.random() num = -num;
return num;
}
setInterval()或setTimeOut()计时器函数传参
var s = '我是参数';
function fn(args) {
console.log(args);
}
var a = setInterval(fn(s),100); // xxxxxx错误xxxxx
var b = setInterval(function(){ // 正确,用匿名函数调用被计时函数
fn(s);
}, 100);
setInterval()或setTimeOut()计时器递归调用
var s = true;
function fn2(a, b){ // 步骤三
if (s) {
clearInterval(a);
clearInterval(b);
}
};
function fn(a){ // 步骤二
var b = setInterval(function(){
fn2(a, b) // 传入两个计时器
}, 200)
};
var a = setInterval(function(){ // 步骤一
fn(a); // b代表计时器本身,可座位参数传递
}, 100);
字符串转换为数字
// 无需 new Number(String) 也无需 Number(String) 只需字符串减去零即可
var str = '100'; // str: String
var num = str - 0;// num: Number
空值判断
var s = ''; // 空字符串
if(!s) // 空字符串默认转换为布尔false,可以直接写在判断语句里面
if(s != null) // 但是空字符串 != null
if(s != undefined) // 空字符串也 != undefined
IE浏览器parseInt()方法
// 下面的转换在IE下为0,其他浏览器则为1,这跟IE浏览器解释数字的进制有关
var iNum = parseInt(01);
// 所以,兼容的写法为
var num = parseInt(new Number(01));
Firebug便捷调试js代码
//Firebug内置一个console对象,提供内置方法,用来显示信息
/**
* 1:console.log(),可以用来取代alert()或document.write(),支持占位符输出,字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。如:console.log("%d年%d月%d日",2011,3,26)
* 2:如果信息太多,可以分组显示,用到的方法是console.group()和console.groupEnd()
* 3:console.dir()可以显示一个对象所有的属性和方法
* 4:console.dirxml()用来显示网页的某个节点(node)所包含的html/xml代码
* 5:console.assert()断言,用来判断一个表达式或变量是否为真
* 6:console.trace()用来追踪函数的调用轨迹
* 7:console.time()和console.timeEnd(),用来显示代码的运行时间
* 8:性能分析(Profiler)就是分析程序各个部分的运行时间,找出瓶颈所在,使用的方法是console.profile()....fn....console.profileEnd()
*/
快速取当前时间毫秒数
// t == 当前系统毫秒值,原因:+号运算符会,会调用Date的valueOf()方法。
var t = +new Date();
快速取小数整数位
// x == 2,以下x值都为2,负数也可转换
var x = 2.00023 | 0;
// x = '2.00023' | 0;
两个变量值互换(不用中间量)
var a = 1;
var b = 2;
a = [b, b=a][0]
alert(a+'_'+b) // 结果 2_1,a和b的值已经互换。
逻辑或'||'运算符
// b不为null:a=b, b为null:a=1。
var a = b || 1;
// 较常见的用法为为一个插件方法传参,和获取事件目标元素:event = event || window.event
// IE有window.event对象,而FF没有。
只有方法对象才有prototype原型属性
// 方法有对象原型prototype属性,而原始数据没有该属性,如 var a = 1, a没有prototype属性
function Person() {} // 人的构造函数
Person.prototype.run = function() { alert('run...'); } // 原型run方法
Person.run(); // error
var p1 = new Person(); // 只有在new操作符时,此时才会把原型run方法赋值给p1
p1.run(); // run...
快速获取当天为星期几
// 计算系统当前时间是星期几
var week = "今天是:星期" + "日一二三四五六".charat(new date().getDay());
闭包偏见
/**
* 闭包:任何一个js方法体都可以称为一个闭包,并非什么只有内嵌函数来引用了外部函数的某个参数或属性才会发生。
* 它有一个独立作用域,在该作用域内可存在若干的子作用域(就是方法嵌套方法),最终该闭包作用域为最外层方法的作用域
* 它包含了本身方法参数和所有内嵌函数的方法参数,所以当一个内嵌函数在外部有引用时,该引用的作用域为引用函数所在的(顶级)方法作用域
*/
function a(x) {
function b(){
alert(x); // 引用外部函数参数
}
return b;
}
var run = a('run...');
// 由于作用域的扩大,可以引用到外部函数a的变量并显示
run(); // alert(): run..
获取地址参数字符串和定时刷新
// 获取问号?后面的内容,包括问号
var x = window.location.search
// 获取警号#后面的内容,包括#号
var y = window.location.hash
// 配合定时器可实现网页自动刷新
window.location.reload();
Null和Undefined
/**
* Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
* Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
* ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。
* 但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法
* 在进行判断时根据需要,判断对象是否有值时最好用‘==='强类型判断。
*/
var a;
alert(a === null); // false,因为a不是一个空对象
alert(a === undefined); // true,因为a未初始化,值为undefined
// 引申
alert(null == undefined); // true,因为‘=='运算符会进行类型转换,
// 同理
alert(1 == '1'); // true
alert(0 == false); // true,false转换为Number类型为0
给方法动态添加参数
// 方法a多了一个参数2
function a(x){
var arg = Array.prototype.push.call(arguments,2);
alert(arguments[0]+'__'+arguments[1]);
}
自定义SELECT边框样式
最简单的调色盘
函数、对象 is 数组?
var anObject = {}; //一个对象
anObject.aProperty = “Property of object”; //对象的一个属性
anObject.aMethod = function(){alert(“Method of object”)}; //对象的一个方法
//主要看下面:
alert(anObject[“aProperty”]); //可以将对象当数组以属性名作为下标来访问属性
anObject[“aMethod”](); //可以将对象当数组以方法名作为下标来调用方法
for( var s in anObject) //遍历对象的所有属性和方法进行迭代化处理
alert(s + ” is a ” + typeof(anObject[s]));
// 同样对于function类型的对象也是一样:
var aFunction = function() {}; //一个函数
aFunction.aProperty = “Property of function”; //函数的一个属性
aFunction.aMethod = function(){alert(“Method of function”)}; //函数的一个方法
//主要看下面:
alert(aFunction[“aProperty”]); //可以将函数当数组以属性名作为下标来访问属性
aFunction[“aMethod”](); //可以将函数当数组以方法名作为下标来调用方法
for( var s in aFunction) //遍历函数的所有属性和方法进行迭代化处理
alert(s + ” is a ” + typeof(aFunction[s]));
/**
* 是的,对象和函数可以象数组一样,用属性名或方法名作为下标来访问并处理。
* 那么,它到底应该算是数组呢,还是算对象?我们知道,数组应该算是线性数据结构,线性数据结构一般有一定的规律,适合进行统一的批量迭代操作等,有点像波。
* 而对象是离散数据结构,适合描述分散的和个性化的东西,有点像粒子。
* 因此,我们也可以这样问:JavaScript 里的对象到底是波还是粒子?如果存在对象量子论,那么答案一定是:波粒二象性!
* 因此,JavaScript里的函数和对象既有对象的特征也有数组的特征。这里的数组被称为“字典”,一种可以任意伸缩的名称值对儿的集合。其实, object和function的内部实现就是一个字典结构,但这种字典结构却通过严谨而精巧的语法表现出了丰富的外观。正如量子力学在一些地方用粒子来 解释和处理问题,而在另一些地方却用波来解释和处理问题。你也可以在需要的时候,自由选择用对象还是数组来解释和处理问题。只要善于把握 JavaScript 的这些奇妙特性,就可以编写出很多简洁而强大的代码来。
*/
点击空白处能触发某一元素关闭/隐藏
/**
* 有时候页面有个下拉菜单或者什么的效果,需要用户点击空白处或者点击其他元素时将其隐藏
* 可用一个全局document点击事件来触发
* @param {Object} "目标对象"
*/
$(document).click(function(e){
$("目标对象").hide();
});
/**
* 但是有一个缺点就是当你点击该元素又想让他显示
* 如果你不及时阻止事件冒泡至全局出发document对象点击时,上面方法就会执行
*/
$("目标对象").click(function(event){
event = event || window.event;
event.stopPropagation(); // 当点击目标对象时,及时阻止事件冒泡
$("目标对象").toggle();
});
以上都是个人整理的一些常用的javascript小方法,记录下来方便自己开发时直接拿来使用,这里也推荐给有需要的小伙伴。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)