js 入门级常见问题
写在前面:以下是个人总结的关于js常见的入门级的问题一些总结。
js是有 ECMAScript Dom Bom 三部分组成。
1,undefined,NaN,Null,infinity
1) undefined 是undefined 类型
var a; //声明变量后不赋值
typeof 类型判断方法
console.log(typeof(a)) //undefined
2) NaN 是 number 型 表示不是一个数字
var a=123;
var b="abc";
a-b 得到NaN
console.log(typeof(a-b)) number
3) Null 面向对象的概念 表示该对象为空
4)infinity 是number 类型 表示无穷大 除数为0可得
2,js精度问题
js在运算时会存在精度问题:
1)可以先乘以100 1000 ....先化成整数在100 1000
2)number.toFixed(参数) 设置保留小数位数 1.528.toFixed(2) =1.53
3,Math 对象常用几个函数
1)天花板函数 ceil Math.ceil(1.23)=2 向上返回最小的整数
2)地板函数 floor Math.floor(1.23)=1 向下返回最小的整数
3)随机数
Math.random() 返回0-1 的随机数
Math.floor(Math.random()*10) 返回0-9 的随机数
4) Math.max() Math.min() 返回最大最小的值
5)Math.abs(x)返回一个绝对值
6)Math.round(x) 四舍五入
4,数据类型转换
1)隐式转换 变量在运算过程中发生的类型转换
!! console.log(!!"abc")
2)显示(强制)转换:
转字符串:a,(String)变量 b,变量.toString()
转数字型:a,Number(变量) b,parseInt(变量) c,parseFloat(变量)
转布尔型:Boolean(变量)
几种转换为false的 undefined NaN Null 0 false ""
5,逻辑运算符的短路操作:当操作数不是bool值时
6,数组检测方式
var arr=[]
1)Array.isArray(arr) 有兼容性问题
2)arr instanceof Array 推荐使用
3) Object.prototype.toString.Call(arr) 可检测任意类型
7,函数的arguments 和 es6 rest 用法
1)arguments只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数 类似数组
2)rest参数只能写在最后,前面用...标识
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
8,函数变量提升:
先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部
'use strict';
function foo() {
var x = 'Hello, ' + y;
alert(x);
var y = 'Bob';
}
foo();
虽然是strict模式,但语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了。
但是alert显示Hello, undefined,说明变量y的值为undefined。
这正是因为JavaScript引擎自动提升了变量y的声明,但不会提升变量y的赋值。
............................................................................................
变量提升后代码:
function foo() {
var y; // 提升变量y的申明
var x = 'Hello, ' + y;
alert(x);
y = 'Bob';
}
注意:函数内变量的怪异声明模式
function fun(){
num=10 //没写var 就相当于全局变量
}
fun()
console.log(num) //10
9,this 简单指向问题
'use strict';
var obj={
name:"test",
printName:function(){
console.log(this.name)
}
}
obj.printName(); //显示 test this 指的就是obj var obj={
name:"test",
printName:function(){
function showName (){
console.log(this.name)
}
return showName()
}
}
obj.printName(); //this 指向 undefined (在非严格模式下指向Windows) 解决方法: var obj={
name:"test",
printName:function(){
var self=this //在函数外捕获this
function showName (){
console.log(self.name)
}
return showName()
}
}
10,sort 排序的坑
1)Array的sort()方法默认把所有元素先转换为String再排序,如果直接排序数字你就踩坑了
2)默认根据ASCII码进行排序
3)sort 是一个高阶函数,sort(function(){
//写具体的实现逻辑
})
// 升序
sort(function(a,b){
return a-b
})
//降序
sort(function(a,b){
return b-a
})
11,获取样式
getComputedStyle(el,null).width ie 不支持
document.getElementById("btn").currentStyle.width ie提供的
function getStyle(tag, attr) { return tag.currentStyle ? tag.currentStyle[attr] : getComputedStyle(tag, null)[attr]; }
12,拼接字符串的问题
在ie7以下存在性能问题,可用数组替换
ie7以上不存在该问题
13,数组的几个方法
1)arr.slice(start,end) 拷贝数组中的一段数据,返回拷贝的数组
2)splice(start,length) 返回截取数组的部分元素,修改原数组
splice 的参数超过2个会将剩下的参数添加到被截取的数组位置上
arr.splice(1,2,"a","b")
14,清空数组:
1)arr.length=0
2)arr=[] //推荐使用
3)arr.splice(0,arr.length)
15,避免事件被覆盖的方法(ie9 以下不支持)
标签.addEventListener(enventType,fn,flase) false默认冒泡 true 捕获
function fun(){
alert("你好")
}
eg:btn.addEventListener("click",fun)
移除事件监听(参数必须一致)
btn.removeEventListener("click",fun)
ie-6-10(enventType 加on)
标签.attachEvent(enventType,fn)
标签.detachEvent(enventType,fn)
16,事件冒泡,和事件捕获
事件冒泡:从里向外执行,遇到相同的事件及执行
事件捕获:执行顺序与冒泡相反(不推荐使用,因为ie使用attachEvent 没有第三个参数)
阻止事件冒泡
e.stopPropagation()
ie 中阻止事件传播 cancelBubble=true
17,事件的对象作用:记录当前事件触发时的一些信息
btn.onclick=function(event){}
event.target真正触发事件的元素
event.type="click"
event.clinetX/clinetY
ie 低版本不兼容
var tar=e.target||e.srcElement
18,Json 串的2方法
1)object-->string JSON.stringify()
2) string--> obj JSON.parse()
19,异常
js 入门级常见问题的更多相关文章
- WebView加载本地html、js文件常见问题及解决办法
声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...
- chart.js使用常见问题
Chart.js是一个简单.面向对象.为设计者和开发者准备的图表绘制工具库. 在使用过程中新手可能会遇到很多问题导致图标无法显示.下面我们来看一下在使用过程中可能会遇到的问题. 刚开始用chart.j ...
- js之常见问题--for循环中为什么点击总是弹出最后一个i
首先看看点击不同li标签时,弹出li的索引值对应的结果 HTML: <ul> <li>0</li> <li>2</li> <li> ...
- js工作常见问题收集
1. viewport <meta name="viewport" content="width=device-width,initial-scale=1.0,mi ...
- 整理前端css/js/jq常见问题及解决方法(2)
移动端 手机 1.点击图片或按钮,选中状态影响到其他范围解决:html{-webkit-user-select:none}<meta name="msapplication-tap-h ...
- 整理前端css/js/jq常见问题及解决方法(1)
1. 兼容ie8圆角的解决方法:下载ie-css3.htc文件在css中加入behavior:url(ie-css3.htc);z-index:3; position:relative 即可 2. 去 ...
- JS中常见问题
//s金额 n保留几位小数 默认保留两位小数 s代表金额,n代表保留的小数位数 function formatMoney(s, n) { n = n > 0 && n <= ...
- 原生js入门级测试题及答案
01.屏幕打印2000到3000之间的所有的数. <script type="text/javascript"> for (var i = 2000; i < 3 ...
- react-native 打包apk 更新js和常见问题
1.打包发布 a.在工程根目录执行如下命令 打包js资源文件 react-native bundle --platform android --dev false --entry-file index ...
随机推荐
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- mysql进阶之存储过程
往往看别人的代码会有这样的感慨: 看不懂 理还乱 是离愁 别是一番滋味在心头 为什么要使用存储过程? 在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定 ...
- JS的内建函数reduce
@(js) reduce函数,是ECMAScript5规范中出现的数组方法.在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实 ...
- xss和sql注入原理学习
8.4 Web跨站脚本攻击 8.4.1 跨站脚本攻击的原理(1) 跨站脚本在英文中称为Cross-Site Scripting,缩写为CSS.但是,由于层叠样式表 (Cascading Style ...
- 在Centos下搭建git并可以通过windows客户端访问
亲测在本地虚拟机和远程服务器上无问题,如有不懂请留言. 注意事项:以下所有操作是在root权限下操作的.1.Centos服务器版本centos6.5 2.首先安装git,使用yum在线安装 yum i ...
- mysql-5.6.34 Installation from Source code
Took me a while to suffer from the first successful souce code installation of mysql-5.6.34. Just pu ...
- Linux设备管理(三)_总线设备的挂接
扒完了字符设备,我们来看看平台总线设备,平台总线是Linux中的一种虚拟总线,我们知道,总线+设备+驱动是Linux驱动模型的三大组件,设计这样的模型就是将驱动代码和设备信息相分离,对于稍微复杂一点的 ...
- 解决 Error: getaddrinfo EADDRINFO 错误
安装npm失败,提示Error: getaddrinfo EADDRINFO,原因在于虚拟机未连接互联网,悲剧.
- Storm介绍(一)
作者:Jack47 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 内容简介 本文是Storm系列之一,介绍了Storm的起源,Storm ...