今天我要来介绍几个我觉得是一般新手都应该要知道的一些写JavaScript的技巧,让你再学习写JavaScript的时候可以提升写code的品质,更可以解决一些后续的问题。
JavaScript宣告变数的时候应该要给它预设的类型!
这样做可以让接手你的程式的人或是未来的自己再观看程式码上面可以清楚的知道这个变数预设给他定义的类型是什么。
# Bad
var name;
var userData;
var isOpen;# Good
var name = "";
var userData = [];
var isOpen = false;
写判断式的时候不要再用==来判断,应该全部都改成===!
我们都知道JavaScript是一个弱型别语言,使用==来判断就会出现像是"1" == 1是true的奇怪现象,为了避免判断上面出现这种我要Number但是你给我String的情况,我们判断都应该使用===。
# Good
if(val === 1){
console.log('ok')
}
if else没有不好,只是某些情形使用return会让你的code更直观!
我们应该让看code的人像是再读code,而不是读逻辑,这样可以加快别人理解我们code,也可以避免过于复杂的逻辑。
# Bad
if(value === ""){
alert("栏位不得为空")
}else{
//后续其他动作
}# Good
if(value === ""){
alert("栏位不得为空");
return;
}
//后续其他动作# Good
if(value === "") return alert("栏位不得为空");
//后续其他动作
再改变DOM元素的style的时候,应该尽量避免直接用JavaScript操作CSS !
直接操作会让接手你专案的人不会知道你用JavaScript去改变style,会增加数倍维护成本,建议是使用add或remove的class方法来取代,当遇到修改style的时候就可以很方便的改CSS就好。
# Bad
document.getElementById("dom").style.color = '#f00';# Good
//css
.textRed{
color: #f00;
}
//javascript
document.getElementById("dom").classList.add('textRed');
document.getElementById("dom").classList.remove('textRed ');
请善用css3的transition,动态也比较顺畅
初学者学习到一些像是jquery 的javascript函式库时候就会喜欢把所有的动态交给函式库来做,例如hover一个按钮改变颜色或是选单跑出来等等,但是这样在行动装式上面会很卡不流畅,所以像是简单的动态都其实可以交给css3 的transition来处理,会顺畅很多。
# Bad
// Js (jquery)
$("#btn").on('hover', function (){
$(this).animate({top: "200"}, 300);
})# Good
// CSS
#btn{
top : 0px;
transition : top 0.3s;
}
#btn:hover{
top : 200px;
}
善加利用filter来筛选资料可以提高code的可读性
蛮多人喜欢筛选资料的时候透过for迴圈在里面用if来筛选资料,不能说是错,但是code看起来很冗长,不漂亮,我们应该使用filter来做资料的筛选。
# Bad
var arr = [];
for( var i = 0; i < data.length; i++){
if(data[i].money > 300){
arr.push(data[i]);
}
}# Good
var arr = data.filter( function (obj){
return obj.money > 300;
})
用console.log来确认程式的运行流程,避免程式执行跟自己想的不一样!
我们都是用console.log来确认变数的内容,却很少利用console.log来判断程式的执行顺序,尤其是遇到跟非同步执行有关的问题更应该先确保程式流程没错,不过记得上线要把测试的console.log给拿掉,毕竟log是会消耗效能的,这个方法只有在debug阶段适用。
# Bad//这是一个错误的例子
//非同步,因为资料还没有回来所以return的资料是空阵列
function getData(){
var data = [];
axios.get("/api/userData").then( function (response) {
data = response.data;
})
.catch(function (error) {
console.error(error);
})
return data;
}var res = getData(); // ----> []//虽然是错误的例子,但是在每个执行接console.log()
//透过这样的console.log()方式可以清楚知道程式运行流程
function getData(){
console.log(1);
var data = [];
console.log(2);
axios.get("/api/userData").then(function (response) {
console.log(3);
data = response.data;
console.log(4);
})
.catch(function (error) {
console.error(error);
})
console.log(5);
return data;
}var res = getData(); // ----> []// log : 1 -> 2 -> 5 -> 3 -> 4
//从这边可以清楚知道程式不是照自己想的1 -> 2 -> 3 -> 4 -> 5这样执行的
//方便我们debug
不要依照设计稿的区块来分档写js,应该要将主程式集中,尤其是在做区块的非同步处理然后要跨区块做资料沟通时,分档撰写只会给自己找麻烦。
# Bad
<script src="./js/jquery.min.js"></script>
//以下都是主程式
<script src="./js/slidshow.js"></script>
<script src ="./js/banner.js"></script>
<script src="./js/tab.js"></script>
<script src="./js/login.js"></script >
<script src="./js/index.js"></script># Good
<script src="./js/jquery.min.js"></script>
<script src="./js/index.js"></script>
当传入array进去函式里面进行操作的时候,我们应该先拷贝一份阵列!
传入函式的array因为记忆体指向都是同一个,所以如果我们把传入的array直接操作会修改到原始资料,为了避免这种情况我们应该要用slice(0)先复制一份阵列再来操作。
# Bad
function Num(list){
list.push("9");
}var arr = [1,2,3];
Num(arr);
console.log(arr) // ---> [1, 2, 3, "9"]
# Good
function Num(list){
var newArr = list.slice(0)
newArr.push("9");
}var arr = [1,2,3];
Num(arr);
console.log(arr) // ---> [1, 2, 3]
this的指向一直都是JavaScript中最令人头疼的问题,尤其是为了用function来模拟class的使用上面,常常需要让绑定事件内this指向到function ( class )的实体上,所以常会使用到bind,使用bind会造成函式的记忆体增加,我们应该使用变数来储存this来调用,而不是bind。
# Bad
function Apple(){
this.name = "mike";
var btn = document.getElementById("btn");
btn.addEventListener("click", function(){
alert(this.name);
}.bind( this));
}
new Apple();
# Good
function Apple(){
this.name = "mike";
var self = this;
var btn = document.getElementById("btn");
btn.addEventListener("click", function(){
alert(self.name) ;
});
}
new Apple();
来自:https://medium.com/i-am-mike
一直以来进行了比较多的微信小程序开发... 总会接触到一些和官方组件或 api 相关或其无法解决的需求,于是决定在这里小小的整理一下微信小程序开发的一些技巧
小程序提供onShareAppMessage 函数,此函数只支持分享给我微信朋友,小程序如何分享到朋友圈呢?使用canvas绘制一张图片,并用wx.previewImage预览图片,然后长按图片保存图片到手机。
前端新手程序员不知道的 20个小技巧:作为前端开发者,使用双显示器能大幅提高开发效率、学编程最好的语言不是PHP,是English、东西交付之前偷偷测试一遍、问别人之前最好先自己百度,google一下、把觉得不靠谱的需求放到最后做,很可能到时候需求就变了...
本地的 IP 地址是分配给你计算机上的内部硬件或虚拟网卡的本地/私有 IP 地址。根据你的 LAN 配置,上述 IP 地址可能是静态或动态的。公共的 IP 地址是你的 Internet 服务提供商(ISP)为你分配的公共/外部 IP 地址。
使用 :not() 在菜单上应用/取消应用边框;给body添加行高;所有一切都垂直居中;逗号分隔的列表;使用负的 nth-child 选择项目;对图标使用SVG;优化显示文本;对纯CSS滑块使用 max-height;继承 box-sizing
禁用右键点击;禁用搜索文本框;新窗口打开链接;检测浏览器;预加载图片;样式筛选;列高度相同;字体大小调整;返回页面顶部;获取鼠标的xy坐标;验证元素是否为空;替换元素
为你网站的用户留下良好的第一印象是非常必要的。随着商业领域的竞争,拥有一个吸引人的网站可以帮助你脱颖而出。研究表明,如果加载时间超过3秒,会有 40% 的用户放弃访问你的网站
清除浮动主要用于子元素浮动(float)之后,父元素无法撑起高度和宽度。文字少时居中,多时靠左因为div嵌套着p,所以p的尺寸并不会超过div。但是要注意,当p的内容为英文单词组成的时候
这次我们主要来分享11个在日常教程中不常被提及的JavaScript小技巧,他们往往在我们的日常工作中经常出现,但是我们又很容易忽略。Set类型是在ES6中新增的,它类似于数组,但是成员的值都是唯一的
为什么要在JavaScript里写CSS?避免命名全局污染,条件和动态样式(比如选择主题色之类的),在框架层面进行限制或补充(比如补全供应商前缀),避免业务人员使用奇技淫巧
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!