[收藏]JS中常见问题

1
2
3
4
5
6
7
8
9
10
11
//s金额 n保留几位小数 默认保留两位小数 s代表金额,n代表保留的小数位数
function formatMoney(s, n) {
n = n > 0 && n <= 20 ? n : 2;
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
var l = s.split(".")[0].split("").reverse(), r = s.split(".")[1];
t = "";
for (i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
return t.split("").reverse().join("") + "." + r;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//小数点往后移动两位[实际上是*100,但是例如:1.0011*100在JS中结果不对。]
function numberChange(i){
if(i==0){
return 0;
}
var str = i.toString(),len = 0,arr=[],newStr='';
for(var i = 0;i<str.length;i++){
if(str[i]=='.'){
len = i;
}
arr.push(str[i])
}
arr[len] = arr[len+1];
arr[len+1] = arr[len+2];
arr[len+2] = '.';
for(var i = 0;i<arr.length;i++){
newStr+=arr[i];
}
return Number(newStr);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//1。获得屏幕的分辨率:
screen.width
screen.height
//2。获得窗口大小:
document.body.clientWidth
document.body.clientHeight
//3。获得窗口大小(包含Border、Scroll等元素)
document.body.offsetWidth
document.body.offsetHeight
document.documentElement.clientHeight //获取当前浏览器窗口可工作高度
1
2
3
4
5
6
7
8
9
10
11
12
13
//鼠标相对于网页的坐标
function mousePos(e){
var x,y;
var e = e||window.event;
return {
x:e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,
y:e.clientY+document.body.scrollTop+document.documentElement.scrollTop
};
};
~function (e){
var e = e||window.event;
alert(‘X:'+mousePos(e).x+’|||Y:'+mousePos(e).y);
}()

js 中的奇葩问题

1、eg:000101 = 65;

000101为获取到的字符串类型,通过click事件传递,000101变为了65;

解决方法:jq中直接运行的代码中获取到的000101为字符串类型,但是后边人为运行此代码相关的代码时获取到的000101就为number类型。由此可见在JS中数字前面加0代表此数字为八进制。可以将000101作为属性传递,或者将000101通过代码直接执行时获取到的是字符串的机制来经行判断转换然后再传递,从而在事件中再去获取判断。

2、执行函数以及引用函数同时出现;

eg:fun(successCallBack(data),failCallBack);successCallBack和failCallBack都是函数,调用fun函数返回成功时,必然走成功,没有问题,但是返回失败时,必走成功,失败同时也会掉,2个同时执行,所以调用un函数时success 和 fail 应该都为执行函数或者引用函数,这样就不会出现返回失败走成功回调的情况。

Mr.Naas wechat
欢迎关注本人公众号