javascript基础知识
1.两个叹号!!
有些时候看某些javascript的库,比如jquery等,都会有一个变量前面加了两个叹号!!。
1 | function test(){ |
根据参考文章,两个叹号的作用主要是:
在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0/""等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。
2.获取url参数
1 | function getQueryString(name) { |
3.?问号之前会有一个斜杠
今天发现了一个奇怪的问题,当你在浏览器输入:www.bing.com?id=0的时候,浏览器最后会变成:www.bing.com/?id=0,如何去掉这么个东西,我其实还是费了一部分经历的,最后也没有成功。
字符斜杠(“/”)和问号(“?”)可以表示查询组件中的数据。请注意,当某些较旧的错误实现用作相对引用的基本URI时,可能无法正确处理此类数据(第5.1节),这显然是因为它们在查找分层分隔符时无法区分查询数据和路径数据。但是,由于查询组件通常用于携带“key = value”对形式的标识信息,而一个常用值是对另一个URI的引用,因此有时可以更好地避免对这些字符进行百分比编码。
4.HTTP协议内容
HTTP协议内容,我觉得其实算是一种基础知识吧。只有理解了HTTP协议的内容,才能知道我们前端都在干什么,如何和后端进行更好的交互。我非常喜欢下面一张图
这张图很好的解释了HTTP协议的请求格式,主要包括的内容。
这张图说明了HTTP协议的响应格式。
5.html导出pdf
需求测就是要把前端的一个显示页面比如说是报表页面,导出为pdf。但是这个报表是通过ajax请求后台的数据,所以,为了省事省力,只能前台自己导出pdf了。
6.获取隐藏元素或者是自定义高度的元素的实际高度
通常我们使用.offsetHeight和offsetWidth获取一个元素的高度和宽度,但是如果一个元素是隐藏元素,或者是动态变化的高度,用这样的方法就不行了,获取到的宽高都是零
1.javascript获取隐藏元素(display:none)的高度和宽度的方法 (这里封装了一个方法,类似于jquery的height())
2.Javascript获取div真实高度
3.javascript中获取dom元素的高度和宽度 (这个其实就是说使用offsetHeight获取高度)
5.Window.getComputedStyle()
6.js 获取自适应高度div的高度 (这个是等数据填充完成之后,使用jq的height()方法获取到最后的高度)
7.JS无法获取display为none的隐藏元素的宽度和高度的解决方案 (这个介绍了jQuery Actual Plugin插件完成的获取隐藏元素的宽高)
8.隐藏元素的宽高无法通过原生js获取的问题 (通过先把隐藏元素克隆一份,放置在这个元素相同的父元素里面,然后用display:block来显示元素,用绝对定位position:absolute来脱离文档流,设置top为负值,这样不会影响原先的元素,这样js获取宽高后再把它删掉)
7.使用原生的xmlhttprequest,设置请求头不生效
当我使用 xmlhttp.setRequestHeader(“Content-type”, “text/plain;charset=GB2312”); 设置请求头的时候,后面的charset总是不生效,最后请求头,还是会被修改为charset=utf-8。因为服务器只返回GB2312的编码,所以我要设置这个值,但是实际上,不需要客户端设置这个值,只需要服务端设置这个charset为gb2312就可以了。
1 | // 发送相关的配置项到服务端 |
【相关解释】
请求类型不为get,并且传递了参数data,才能设置contentType。
1.使用zepto的ajax进行请求,contentType设置编码不生效? 这里设计到了jquery的替代库的zepto源码,里面说明的关于设置编码的问题
2.Jquery, No X-Requested-With=XMLHttpRequest in ajax request header?
3.How to change ajax-charset? contentType:”application/x-javascript; charset:ISO-8859-1”
8.设置滚动条的位置
设置滚动条的位置,可以通过scrollLeft进行设置,如下代码示例,需要注意的是,这个滚动条的设置是在html上设置,而不是在body或者是 #app 上进行设置。
1 |
|
这里有一个地方需要注意,就是浏览器刷新时候,会记住之前的滚动位置,从而将滚动位置设置到之前的滚动的地方,所有有时候你设置了scrolLeft,也会出现无效的情况。
【解决方案】
就是设置浏览器不记住原先的位置
1 | if(history.scrollRestoration) { |
1.scrollLeft属性设置无效的一个记录 首先应该明确scrollLeft这个属性,只有当div中的内容长度大于当前div的长度是才能working
2.前端设置滚动条位置居中 这里是固定一父元素的宽度,固定了一个子元素的宽度,进行了计算。
3.Vue 项目中document.documentElement.scrollTop 设置无效, 一直都是0 的问题记录 列表的div加上一个最小高度, 一般设置为屏幕的高度。
4.浏览器刷新不记住之前的滚动位置 什么意思呢?其实是个浏览器的一个小细节哈,大家可以随便找个网址(B站或者csdn啥的),内容超出浏览器可视区域的都可以,右侧会有个滚动条,这时候向下滚动,然后去刷新浏览器,你会发现浏览器默认会记住当前滚动的位置。解决方法:1.设置为 manual 可以让浏览器不记住之前的滚动位置。2.给外层div容器设置宽高,并设置overflow: auto。
5.居中元素的 scrollleft 的计算方法
6.Vue实现渲染数据后控制滚动条位置 1.使用setTimeout(),将DOM操作改为异步;2.使用nextTick实现。
7.HTML DOM scrollLeft 属性
8.vue设置scrollLeft 一直为0的原因