本文深入解析JavaScript中访问对象成员(属性与方法)的两种主要方式:点号(.)与方括号([])。详细阐述两者在静态与动态访问场景下的适用性,并指出方法访问仅支持点号语法。文章进一步通过两个经典面试题——统计字符串高频字符与判断数组相似性,展示相关语法在实际编码中的应用,涵盖类型检测、对象遍历及逻辑判断等核心知识点。
JavaScript对象成员访问基础
对象的成员涵盖其属性与方法。
访问对象的属性
JavaScript中,利用“ . ”与“ [ ] ”符号可访问对象属性。
区别在于:“ . ”通常用于静态对象属性存取,而“[ ]”在动态存取属性时更具优势。
var object = {name:'xiaoming',age:29};
var name1 = object.name;var name2 = object['name'];
对象方法的访问限制
访问对象的方法
JavaScript中,仅能通过“ . ”符号访问对象方法。
function Person(){
this.name = 'xiaoming';
this.age = 29;
this.say = function(){
alert('This is person');
}
}
var student = new Person();
alert(student.name);
alert(student['age']);
student.say(); //使用" . "访问对象方法
经典算法实战:字符串统计与数组相似性判断
由此引申出两个问题:
1. 统计字符串中出现频率最高的字符及其次数。
var str = 'Thisthebesttimesewerty';
var obj = {};
for(var i=0; i<str.length;i++){
var char = str[i];
// var char = str.charAt(i); //charAt()可返回指定位置的字符,i为字符的下标,从0开始
if(obj[char]){
obj[char]++; //char是obj对象的一个属性,如果存在次数加1
}else{
obj[char] = 1; //如果不存在,保存在obj中并计数为1
}
}
var max = 0;
var maxChar = null;
for(var key in obj){
if(max < obj[key]){
max = obj[key]; //出现最多次数max
maxChar = key; //出现次数最多的字符maxChar
}
}
2. 实现arraysSimilar函数,用于判断传入的两个数组是否相似。
具体需求如下:
1. 数组内元素类型需一致,但排列顺序可不同。例如[1, true]与[false, 2]视为相似。
2. 两个数组的长度必须相等。
3. 类型判断需涵盖:String, Boolean, Number, undefined, null, 函数,日期, window。
若满足上述所有条件,返回"判定结果:通过";否则返回"判定结果:不通过"。
function arraysSimilar(arr1,arr2){
if(!(arr1 instanceof Array) || !(arr2 instanceof Array)){
return false;
}
if(arr1.length !== arr2.length){
return false;
}
var i=0, n=arr1.length, countMap1={}, countMap2 = {}, t1, t2,
TYPES = ['string','boolean','number','undefined','null','function','date','window'];
for(i; i<n; i++){
t1 = typeOf(arr1[i]);
t2 = typeOf(arr2[i]);
if(countMap1[t1]){
countMap1[t1]++;
} else{
countMap1[t1] = 1;
}
if(countMap2[t2]){
countMap2[t2]++;
} else{
countMap2[t2] = 1;
}
}
for(i=0; i<TYPES.length; i++){
if(countMap1[TYPES[i]] != countMap2[TYPES[i]]){
return false;
}
}
return true;
}
function typeOf(ele){
var r;
if(ele === null){
r = 'null';
}
else if(ele === 'window'){
r = 'window';
}
else if(ele instanceof Array){
r = 'array';
}
else if(ele instanceof Date){
r = 'date';
}
else{
r = typeof(ele);
}
return r;
}