javascript中length属性的谜团分析

作者:小菜 更新时间:2025-03-16 点击数:
简介:本文中,我将会通过类数组对象(array like object),探索javascript中的length属性的一些秘密。

例子1:var obj={0:‘a‘

【菜科解读】

本文中,我将会通过类数组对象(array like object),探索javascript中的length属性的一些秘密。

例子1:

var obj={0:'a',1:'b'}alert(obj.length); //undefinedvar arr=['a','b']alert(arr.length); // 2

从上面的例子看,类数组对象中的length属性并不和它储存的数据数量直接挂钩,无论是索引属性(0,1)还是length属性都作为对象的普通属性存在,它们之间并没有任何关系,js引擎并不会根据储存数据的数量来自动计算类数组对象的长度。

但是类数组对象的length所确实和存储的数据量没有任何关系么?例子2说明并非如此:

例子2:

function myarr(){}var m=new myarr();Array.prototype.push.apply(m,['cson','lai','xiaoc']);alert(m.length);//IE8以下:undefined 其他浏览器:3alert(m[2]);//IE8以下:undefined 其他浏览器:‘xiaoc’

从例子2可以看到,除了IE8以下版本,在通过强制使用数组方法为类数组对象添加元素时,对象的length属性也会被计算。

而IE8以下版本貌似不支持强制使用数组方法为类数组对象添加元素。

例子3:

该例子在例子2的myarr构造函数中添加一个初始化操作,在类数组对象初始化时添加一个元素,怪异的事情发生了:

function myarr(){this[0]='cc';}var m=new myarr();Array.prototype.push.apply(m,['cson','lai','xiaoc']);alert(m.length);//ie8以下:undefined 其他:3alert(m[2]);//ie8以下:undefined 其他:xiaoc

ie8以下版本浏览器继续貌似不支持强制使用数组方法,这个再下一个例子中会作讨论。

而对于其他浏览器,length属性输出为3,而索引为2的元素是’xiaoc‘,显然js引擎完全忽略了类数组对象原来所存在的索引为0的元素‘cc'!马上我们再看下一个例子,这个例子在例子3的基础上多加一个对length属性的初始化:

function myarr(){this[0]='cc'; this.length=1;}//多加一个length的初始化var m=new myarr();Array.prototype.push.apply(m,['cson','lai','xiaoc']);alert(m.length);//输出4alert(m[2]);//输出’lai‘

奇怪的事再次发生,这次所有浏览器(包括ie6 7)都正确输出4,索引为2的元素正确输出为’lai‘,可见IE 6 7添加了length属性的初始化之后,可以正常使用数组方法了。

现在再试试把length属性初始化为不合法类型:

例子4:

function myarr(){this[0]='cc'; this.length="bo";}//length设置为不能转换为number的不合法类型var m=new myarr();Array.prototype.push.apply(m,['cson','lai','xiaoc']);alert(m.length);//输出 3alert(m[2]);// 输出’xiaoc‘

function myarr(){this[0]='cc'; this.length="1";}//length设置为能转换为数字的不合法类型Array.prototype.push.apply(m,['cson','lai','xiaoc']);alert(m.length);//输出4alert(m[2]);//输出’lai‘

从上面的所有例子来看,我们可以作出一个推断,在使用数组方法时(这里以push为例),大概是这样的流程:

IE6 7:

可见IE6 7并非不支强制持使用数组方法添加元素,但是会先判断length属性是否存在,如果不存在,则返回,不做任何操作。

如果length属性为不合法值,则尝试转换为number类型,如果转换失败则length设置为0,这就可以解析例子2,3里输出的undefined和例子4的正确输出。

其他浏览器:

其他浏览器会根据length属性作不同操作,如果length属性不存在,则设置length为0,如果length属性为不合法值,则尝试转换为number类型,如果转换失败则也length设置为0。

正因为length属性对于数组方法有如此决定性的作用,因此js引擎禁止了对length属性写入不合法值:

var arr=['1','2','3'];arr.length='undefined';//报错 invalid array length

从上面的例子中,我们可以得出一个结论:当我们使用类数组对象时,为了避各种length计算不正确引起的怪异问题,我们应该在初始化类数组对象时初始化length属性的值,如果在初始化时添加了元素但却没有设置length属性的值,在使用数组方法时,IE6 7会忽略所有操作,其他浏览器则会忽略初始化时添加的元素。

另外再介绍length属性带来的另一个问题:

请看例子5:

function myarr(){}myarr.prototype=new Array();var m=new myarr();m.push('cson','lai','xiaoc');alert(m.length);//IE6 7:0 其他:3alert(m[2]);//所有浏览器:’xiaoc‘

当使用原型继承数组时,IE 6 7下length会始终为0,无论你有多少个元素,其他浏览器则正常。

即使强制设置length属性,IE6 7 下死活为0:

function myarr(){}myarr.prototype=new Array();var m=new myarr();m.length=10;alert(m.length);//IE6 7:0 其他:10

因此得出结论:IE6 7下对象原型继承数组时length属性会一直为0,因此如果类数组对象需要使用数组的方法,不要去继承数组,而应该使用Array.prototype.xxx.apply(obj,[]);的方法,并且记得正确初始化length属性的值。

javascript,中,length,属,性的,秘密,分析

吉林社保中间断了可以补交吗??(4月21日)

下面随新社通小编看看:吉林社保中间断了可以补交吗?社保断缴了可以补缴吗?吉林关于“断交的能补上吗”这一问题,社保断了是可以进行补缴的。

但具体补交条件因地区、险种和断交时间长短而有所不同。

社保和医保断交后是可以补交的,但具体补交的法规和条件因地区、险种和断交时间长短而有所不同。

以下是详细说明:(1)社保补交新规补交条件:社保补交分为两种情况:断交当年及时补交:一般可以补交两年内的社保保费,且不需要提交额外资料。

退休前一次性补交:如果养老保险和医疗保险的缴费年限不足,可以在退休前一次性补交。

补交方式:通过新单位补交:找到新工作后,单位可以协助补交断交期间的社保。

个人补交:如果是本地户口,可以自行到社保局办理补交;外地户口则需通过第三方代理机构办理。

滞纳金:如果用人单位未按时缴纳社保,需按日加收万分之五的滞纳金。

(2)医保补交新规断交时间较短(3个月内):职工医保:许多地区允许补交,补交后医保待遇不受影响。

例如,北京市断交不超过3个月可补交。

居民医保:部分地区允许在集中缴费期后补交,补交后次月即可享受医保待遇。

断交时间较长(超过3个月):职工医保:部分地区不允许补交,需重新参保并等待一定时间才能享受待遇;部分地区允许补交,但待遇可能受限。

居民医保:通常只能等待下一年度集中缴费期重新参保,无法补交。

(3)特殊情况补交单位原因导致断交:用人单位需为职工补交,并承担滞纳金。

灵活就业人员断交:补交与职工医保类似,断交时间较短可自行补交,断交时间较长则可能无法补交或待遇受限。

(4)新规支持异地补交根据2025年公布的社保新规,社保断缴最高可补15年,且支持异地办理,为因工作变动或经济困难导致断缴的人员提供了便利。

(5)补交申请部门社保补交:向当地社会保险经办机构申请。

医保补交:向当地医保经办机构或税务部门(部分地区)申请。

总结:断交后补交是可行的,但需根据具体情况选择合适的方式和时机,并注意补交的限制和滞纳金问题。

吉林一分钱不交有钱领取吗?没有交过一分钱社保,老了怎么办,能领养老金吗?一分钱不交60岁是不能领养老金的。

根据现行的养老保险制,无论是职工基本养老保险还是城乡居民养老保险,都需要满足一定的缴费年限才能在达到法定退休年龄时领取养老金。

对于职工基本养老保险,通常要求累计缴费满15年;而对于城乡居民养老保险,虽然方案更加灵活,但一般也需要有一定的缴费记录或符合特定的条件才能享受养老金待遇。

库尔德人是一个什么样的群体 他们又在中东乱局中扮演着什么角色

“库尔德人”——这个之前我们常有耳闻却又模糊的群体不时登上新闻的显要位置,不是“库尔德人全家上阵抵抗敌人”就是“库尔德人女战士人弹保卫家园”,亦或是“库尔德人游行示威”云云,一时间库尔德人俨然成了中东乱局的关键角色之一。

那么他们到底是一个什么样的群体?这个群体又有着怎样的诉求?他们又在中东乱局中扮演着什么角色呢? “库尔德人”,一个以“勇士”为代称的民族,是西亚最古老的民族之一,是中东地区仅次于阿拉伯、和波斯民族的第四大民族。

公元前6世纪中期,米底被居鲁士大帝征服,米底人与波斯人的融合形成了今日的库尔德人,如今总人口约3000万。

库尔德人聚居地被称为库尔德斯坦,这一地区原先大部分为奥斯曼帝国所统治。

库尔德人信仰伊斯兰教,多属逊尼派,讲库尔德语。

库尔德文的书写在伊拉克和伊朗用阿拉伯文字母,在土耳其和叙利亚用拉丁字母。

然而,他们又是世界上唯一一个人口众多,却始终没有获得过自决权的民族。

其以复杂性、尖锐性和国际性特点长期以来一直是中东地区仅次于阿拉伯国家与以色列之间冲突的第二大热点问题。

库尔德斯坦最初作为一个行政区划的概念。

1157年,塞尔柱苏丹桑贾尔设立库尔德省,行省区域包括哈马丹、克尔曼、辛贾尔等地区,远远大于今天库尔德斯坦的面积。

直到19世纪中叶奥斯曼帝国才设置了库尔德斯坦省,但存在时间很短。

库尔德斯坦当时处于奥斯曼帝国和波斯帝国之间,两大帝国更多地把库尔德斯坦地区作为他们的缓冲地带。

库尔德人处在两大帝国的夹缝中,享有一定的自治。

一战后,协约国与奥斯曼帝国签订《色佛尔条约》,承认库尔德人自治和独立的权利。

然而,随着凯末尔革命的胜利,《色佛尔条约》被《洛桑条约》所取代,库尔德为拥有丰富的石油资源而被割到四个中东国家。

其中,土耳其库尔德斯坦称北库尔德斯坦,伊拉克库尔德斯坦地区称为南库尔德斯坦,伊朗库尔德斯坦地区称东库尔德斯坦,叙利亚库尔德斯坦地区称为西库尔德斯坦。

库尔德人作为美国在中东的一枚棋子,时而受到美国的扶持,时而受到美国的压制。

在政治制度建设上,库尔德地区的两大政党分别是巴尔扎尼家族领导的库尔德民主党(KDP)和塔拉巴尼家族领导的库尔德斯坦爱国联盟(PUK),他们各自拥有“自由斗士”部队,对该地区的政治制度建设存在分歧,这导致两派间矛盾冲突不断,一度双方还邀请伊朗和伊拉克中央政府的军队入境来清缴对方,无疑内部的对抗和排他主义者的利益将会阻碍独立。

库尔德人谋求自治和独立,美国的支持必不可少,但过于依赖美国显然是不明智的。

就目前而言,伊拉克库尔德人实际上已建立“国中之国”,他们拥有自己的财政来源、政治组织和武装力量,俨然成为一个“准国家”。

叙利亚危机导致多国库尔德力量的联合,叙利亚库尔德人也积极谋求民族权利和自治地位,甚至要建立所谓的“自治国家”。

库尔德人建国梦极易导致中东地缘政治新一轮的洗牌,这是西方国家和库尔德人所在国不能容忍的。

鉴于历史和现实的原因,库尔德斯坦国只是梦。

随机文章声名狼藉的女力先锋——大法官露丝.拜德.金斯伯格金斯伯格面对袁绍的十万大军曹操如何用不到两万的兵力赢得官渡之战?清朝的皇后权力多大?这件事让人傻眼:竟然是她决定俄罗斯不明飞行物干扰导弹中心,300米飞行物险酿核战争助力恋爱的黑暗效应,让你免除第一次见面的尴尬(加快推到进度)

加入收藏
               

javascript中length属性的谜团分析

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录