前端路上的各种问题-javascript—4
来源:互联网 发布:阿里云备案幕布ps 编辑:程序博客网 时间:2024/06/05 19:21
1.delete删除属性问题:
(1)对于window.name虽然delete输出true,但是window.name的值依然存在!因为name属性是window对象本身就具有的属性。window.sex确实可以删除掉的!
window.name="qin";
alert(delete window.name);//返回true
alert(window.name);//返回qin
var name="xx";
alert(delete name);//返回tue,和上面的解释一样,name是window本身的属性
alert(name);//返回xx
var sex="xx";
alert(delete sex);//返回false
alert(sex);//返回xx
bar="xx";//差别在于:这里没有var声明
alert(delete bar);//返回true
alert( typeof bar);//undefined
window.sex="xx";
alert(delete sex);//返回true
alert(typeof sex);//返回undefined
window.sex=function(){}
alert(delete sex);//返回true
alert(typeof sex);//返回undefined
//不是通过“.”这种属性赋值的方式,而是直接定义的方式是不能删除的!
function F(){}
alert(delete F);
alert(F);
也就是说:全局对象上面的属性和方法可以被彻底删除(直接定义函数形式除外),但全局对象本身具有的属性,如name会有残余,即delete返回true,但是该值依然存在!
(2)可以删除函数的length
function f(name,sex){}
alert(f.length);//输出2
alert(delete f.length); // true表示可以删除
alert(f.length); // "0"删除后的length为0
(3)arguments不能删除,实参不能删除,全局属性和函数不能删除
function(){alert(delete arguments); }//返回false
function f(name){alert(delete name)} f();//返回false
function f(){} alert(delete f);alert(f);//返回false,function(){}表示全局函数不能删除
var f="name"; delete f;//表示不能删除全局属性
(4)如果一开始的就不能被删除,那么即使重新赋值以后的值如果可以被删除,该属性也不能被删除
function F(){} //不能被删除
F="123";//window.F是全局属性,可以被删除
alert(delete F);//依然不能被删除
alert(F);//返回123,也就是重新赋值后,重新赋的值虽然应该可以删除,但是由于被赋值之前不能删除,所以还是不能删除!这也说明了,同名重新赋值会发送覆盖!
(5)Eval函数中的变量可以被删除。
eval("var x = 1;");
alert(delete x);//返回true
alert(typeof x);//undefined
eval("function test(){ var x=1; alert(delete x);/*返回false */;return 1;}");
alert(test()); // 1
alert(delete test);
alert(typeof test); // undefined
(6)prototype中声明的属性也不能delete
function F(name){this.name=name;};
F.prototype.x="liubei";
//构建对象
var f=new F("zhangfei");
//对象的原型属性,虽然输出为true,但是没有真正删除!
alert(delete f.x);
//多次delete,也不会删除原型里面的属性
delete f.x;
delete f.x;
//输出“liubei”
alert(f.x);
(6)数组中的元素可以被delete,但是会留下空洞,因为只是删除值,没有把键删除,因此只是用undefined替换掉。如果要彻底删除数组元素用splice方法
splice(1,2)//下标1开始删除两个
splice(1,0,“red”,"green")//下标1开始插入两个数
splice(1,1,"red","green");//删除位置1,然后再插入两个
2.用escape方法判断单字节和双字节
for(var i=0;i<l;i++)
{
var c=this.charAt(i);
if(escape(c).length>4)//为什么双字节的escape函数输出的长度大于4呢?“年”被编码成为“%u5E74”
{
b+=2;
}else if(c!="\r")
{
b++;
}
}
- 前端路上的各种问题-javascript—4
- 前端路上的各种问题-javascript-1
- 前端路上的各种问题-javascript-2
- 前端路上的各种问题-javascript-3
- 前端路上的各种问题-javascript—5
- 前端路上的各种问题-javascript—6
- 前端路上的各种问题-javascript—7
- 前端路上的各种问题-javascript—8
- 前端路上的旅行
- 前端路上的见闻:(一)
- 大前端路上的点点滴滴
- 在学习前端的路上
- 关于前端的各种height问题
- 前端路上
- 在前端的路上越走越远——我的前端路
- 前端的各种优化
- 前端路上遇到的坑—跨域获取json格式的数据
- 校招季--献给前端求职路上的你们(H5+C3)
- Java拾遗-异常
- 【Android基础】-基于Apache HttpClient封装的网络操作工具类
- Django ajax
- Java性能优化(8):改写equals时总是要改写hashCode
- Regionals 2014 >> Latin America >> 6823 - Counting substhreengs
- 前端路上的各种问题-javascript—4
- C# Excel 生成图表,添加趋势线、误差线
- this class is not key value coding-compliant for the key progressVIew
- 可以将txt快速转换成pdf的方法分享
- ViewPager和ScrollView冲突,不重写控件的一个解决方法
- NOIP2006
- android studio关于快捷键设置-切换eclipse中 alt+斜扛代码提示快捷键
- php 中全半角转换
- java 的堆栈 的内存分析