填坑系列--通过.和[]获取属性值的区别

填坑系列--通过.和[]获取属性值的区别


昨天用原生js,写了一个获取元素具体信息值的getStyle函数,今天拿来测试,发现始终返回undefined,一顿debug,发现第9行,表达式计算过后,始终返回undefined。

function getStyle(ele,attr){
var val = null,reg = null;
//判断是否为标准浏览器
if("getComputedStyle" in window){
    val = window.getComputedStyle(ele,attr)[attr];  //修改过了,原来是.attr
    }else{
//在非标准浏览器下对opacity属性,进行处理
    if(attr==="opacity"){
        val = ele.currentStyle.filter;
        reg = /^alpha\(opacity=(\d+(?:\.\d+)?)\)$/i
        val = reg.test(val)?reg.exec(val)[1]/100:1;
        
    }else{
        val = ele.currentStyle[attr];
    }
}

console.log(val);
//去单位
reg = /^(-?\d+(\.\d+)?)(px|pt|em|rem)?$/i;
return reg.test(val)?parseFloat(val):val;
}


刚开始怀疑是getComputedStyle()方法写错了,复制到控制台,完美输出;于是怀疑是attr属性是字符串引起的,把val =window.getComputedStyle(ele,attr).attr改成val =window.getComputedStyle(ele,attr).height;这次结果就输出了,但是要怎么解决属性是字符串的问题,goole 获取属性值+字符串发现原来原来通过. 和[]获取属性值是有区别的;总结起来就是.后面需要直接跟对象里面的属性名称,e而不能通过是通过变量获取到的,[]里面可以是字符串或者变量,它可以通过变量获取属性名称

例如:

var obj = {name1:"xiaoming"};

var name = "name1";

obj.mame1   //"xiaoming";
obj.name    // undefined  表示说name这个属性根本不存在;

//所以此时,我们可以使用
obj[name]     //"xiaoming"

小结

1.这世间本都是坑,填的多了,也就少了。
2.看权威指南第四章和第六章;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • javascript 是一门弱类型,动态脚本语言(所有变量通过var声明,不需要用int char....).它的...
    3hours阅读 748评论 0 1
  • 一别之后 黄泉就是天涯 还有没有一条路 可以曲径通幽 时间总是用今天的脚步 替换昨天,所有的昨日都已 用旧,唯有您...
    梧桐漫语阅读 276评论 0 0
  • 对于苏小而言,大徐是一个很会说话的人。也和很多男生一样喜欢班上最突出的那个女生那样肤浅。 可是,苏小不知道她到底喜...
    瓷心阅读 183评论 0 0
  • 爱你的人会什么都介意 最后又什么都能原谅 这不是天生好脾气 只是不想失去你 ​​​​ 一辈子那么长 我才不会只喜欢...
    笃学青衿阅读 152评论 0 2