百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

前端开发中常见避坑问题(前端开发过程中遇到的难点)

zhezhongyun 2025-05-09 22:49 26 浏览

javascript


try catch捕获异常

JSON.parse、JSON.stringify、encodeURIComponent、async await 要放到 try catch 中。

new RegExp 最好也放到 try catch 中,用构造函数 new RegExp 构造正则表达式时,一般表达式中需要插入变量时只能用构造函数方式,注意里面的特殊字符需要转义,尤其是之际接收用户输入的字符,否则容易报错,如:

new RegExp('+861347', 'ig')

// 会报 SyntaxError: Invalid regular expression: /(+861347)/: Nothing to repeat

数字精度问题

接口数据中比较长的 id 要用字符串,否则大数字会出现失精导致 id 对不上。

浮点数运算失精,涉及到计算的用number-precision这类计算库。

时期时间

macOS 系统下日期时间格式要用斜杠 / 代替横杠 -。

资源访问

https 下访问 http 资源会报错

replaceAll 替换字符串中内容

项目中尽量不要用 replaceAll 方法,有兼容性问题,在部分浏览器或版本里会报错(即使常用的Chrome也要大于85版本):replaceAll is not a function,替换成 replace 和正则加 g。

for循环中间的分号

for循环里的条件这个地方中间的是分号,不是逗号

for(var i = 0; i < 100; i++) {  
}

等号判断相等

判断是不是相等是用 == 或 ===,切记不要用 = 去判断是不是相等,一个等号是赋值。

alert方法

alert方法只能弹出一段字符串,所以默认会调用toString()方法,要弹出多个变量需要用 + 号拼接,如果用逗号分割,则只会弹出第一个变量的值。

请求接口路径中的斜杠

找了半个小时的bug,一直拿不到数据,用postman又可以:注意如果用变量拼接地址,原地址后面有/的,这个地方就不用再加了:

const baseUrl = 'http://localhost:8888/api/private/v1/'

// 有问题的
const api = `${url}/login`

// 正确的
const api2 = `/${url}/login`

Math.max()

Math.max()方法是找出一串数字中的最大值(不是数组),如果直接传入数组返回的就是NaN,如果要判断数组中的最大值: ① 用ES6中的展开运算符,直接将数组中的元素展开 Math.max(…arr) ② 用apply方法改变this的指向 Math.max(null, arr)

方法中return时省略分号

javascript有自动补全功能,所以每行可以加分号也可以不加:

function foo(){
   return 
   {
       b: 2
    }
}

会被解析成:

function foo(){
   return ;
   {
       b: 2
    }
};

所以最后的返回结果是 undefined。

map返回一个新的数组

用map遍历数组时如果是要得到一个新的数组,一定要记得return item,要不然原数组里的元素都变成undefined了。

html


标签自定义属性

自定义属性不可以通过【元素.自定义属性名】来获取,要用 getAttribute('自定义属性名')。

百度小程序template绑定数据

百度小程序模板 template 绑定数据那是3对花括号,不是2对

<template is="personCard" data="{{{...person}}}" />

微信那就是2对:

<template is="msgItem" data="{{...item}}" />

狗日的百度,净搞些鬼迷日眼的。

微信小程序页面节点上绑定数据

微信小程序里,wx:for="{{arr}}",这里一定要加 {{}},只有事件名才不用加双花括号,其他的只要是变量都要加,wx:key="index"(这个地方也不用加花括号)。

css


行内元素添加transform动画

transform 对于行内 inline 元素是无效的,如果要对其添加transform动画,需要先用display将行内元素变成行内块或块元素。

小程序button默认样式

小程序button去掉默认边框要设置

button::after {
    border: none;
}

自己设置border后行高要根据内减模型(box-sizing: border-box)来计算,里面的文字才能垂直居中。

img图片裁切 object-fit

给img标签加上

.img {
    object-fit: cover;
}

被替换的内容在保持其宽高比的同时填充元素的整个内容框。如果对象的宽高比与内容框不相匹配,该对象将被剪裁以适应内容框。

图片继承父盒子的宽,width: 100%,在设置object-fit: cover;不起作用,原因:要给img同时设置出宽高,才能裁切。

Tabbar导航栏定位问题

给tabbar设置position: fixed;后,不要设置left: 0;在大屏上tabbar就会跑到浏览器左下角去了,因为他是相对浏览器来做定位的。

设置背景色渐变

不是设置background-color: linear-gradient(),而是background: linear-gradient()。

自闭合标签伪元素

伪元素只有双标签才可以用,伪元素的本质是往标签元素的内部添加额外的元素,所以自闭合标签比如 img 是不能添加伪元素的。

用a标签放置网站Logo

<div class="logo">
    <h1><a href="#"></a></h1>
</div>

用a标签的背景图放网站logo,切记a标签是行内元素,不可以设置宽高,所以要先display: inline-block,然后设置宽高后,背景图才能显示出来,如果div是用的flex布局,a要设置成block才行。

导航栏的菜单也要注意,如果要给a设置宽高,也得先转成行内块inline-block(最好设置成block,设置成inline-block会出现其他一些问题)。

<li>
    <a href=“#”>我是导航</a>
</li>

用span或者i标签放置背景图时也要先改变元素显示类型,才能设置宽高。

相关推荐

Chinese vice premier calls for multilateralism at Davos

DAVOS,Switzerland,Jan.21(Xinhua)--ChineseVicePremierDingXuexiangdeliveredaspeechatthe...

用C++ Qt手把手打造炫酷汽车仪表盘

一、项目背景与核心价值在车载HMI(人机交互界面)开发领域,虚拟仪表盘是智能座舱的核心组件。本项目基于C++Qt框架实现一个具备专业级效果的时速表模块,涵盖以下技术要点:Qt图形绘制核心机制(QPa...

系列专栏(八):JS的第七种基本类型Symbols

ES6作为新一代JavaScript标准,已正式与广大前端开发者见面。为了让大家对ES6的诸多新特性有更深入的了解,MozillaWeb开发者博客推出了《ES6InDepth》系列文章。CSDN...

MFC界面开发工具BCG v31.1 - 增强功能区、工具箱功能

点击“了解更多”获取工具亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBarProfessionalforMFC和BCGSuiteforMFCv31.2正式发布!新版本支...

雅居乐上调出售吉隆坡项目保留金,预计亏损扩大至6.64亿元

1月2日,雅居乐集团(03383.HK)发布有关出售一家附属公司股权披露交易的补充公告。此前雅居乐集团曾公告,2023年11月8日(交易时段后),集团子公司AgileRealEstateDeve...

Full text: Address by Vice Premier Ding Xuexiang&#39;s at World Economic Forum Annual Meeting 2025

DAVOS,Switzerland,Jan.21(Xinhua)--ChineseVicePremierDingXuexiangonTuesdaydeliveredasp...

手机性能好不好 GPU玄学曲线告诉你

前言各位在看测试者对手机进行评测时或许会见过“安卓玄学曲线”,所谓中的安卓玄学曲线真名为“ProfileGPURendering”。大多数情况下,在系统“开发者选项中被称为“GPU显示配置文件”或...

小迈科技 X Hologres:高可用的百亿级广告实时数仓建设

通过本文,我们将会介绍小迈科技如何通过Hologres搭建高可用的实时数仓。一、业务介绍小迈科技成立于2015年1月,是一家致力以数字化领先为优势,实现业务高质量自增长的移动互联网科技公司。始...

vue3新特征和所有的属性,方法汇总及其对应源码分析

vue3新特征汇总与源码分析(备注:vue3使用typescript编写)何为应用?constapp=Vue.createApp({})app就是一个应用。应用的配置和应用的API就是app应用...

China&#39;s stability redefines global trade in a volatile era

ContainersareunloadedatQingdaoPort,eastChina'sShandongProvince,December10,2024.[Photo/X...

QML 实现图片帧渐隐渐显轮播

前言所谓图片帧渐隐渐显轮播就是,一组图片列表,当前图片逐渐改变透明度隐藏,同时下一张图片逐渐改变透明度显示,依次循环,达到渐隐渐显的效果,该效果常用于图片展示,相比左右自动切换的轮播方式来说,这种方式...

前端惊魂夜:我竟在CSS里写出了JavaScript?

凌晨两点,写字楼里只剩下我工位上的一盏孤灯。咖啡杯见底,屏幕的光映在疲惫的眼镜片上。为了实现一个极其复杂的动态渐变效果,我翻遍了MDN文档,试遍了所有已知的CSS技巧,却始终差那么一口气。“要是CSS...

10 个派上用场的 Flutter 小部件

尝试学习一门新语言可能会令人恐惧和厌烦。很多时候,我们希望我们知道早先存在的某些功能。在今天的文章中,我将告诉你我希望早点知道的最方便的颤振小部件。SpacerSpacer创建一个可调整的空白空...

让我的 Flutter 代码整洁 10 倍的 5 种

如果你曾在Flutter中使用过SingleTickerProviderStateMixin来制作动画,猜猜怎么着?你已经使用过Mixin了——恭喜你,你已经处于一段你甚至不知道的关...

daisyUI - 主题漂亮、代码纯净!免费开源的 Tailwind CSS 组件库

漂亮有特色的CSS组件库,组件代码非常简洁,也支持深度定制主题、定制组件,可以搭配Vue/React等框架使用。关于daisyUIdaisyUI是一款极为流行的CSSUI组件库,...