题目:
var isValid = function(s) {
/*
思路:遍历字符串把所有左括号压入栈中,遇到右括号栈顶元素出栈比较右括号匹配,不匹配输出false,最后判断判断是否全部匹配完,避免有单独的括号
注意:对象中的键不是合法的js标识符,不可以用点表示法,只能用括号表示法
1.对象中点语法和方括号语法区别:
(1).属性名是合法标识符时,使用点语法和方括号语法都是可以的,属性名不是合法标识符时,只能使用方括号语法。
const obj = {
"num": 6,
"0*":"juejin"
}
//num是合法标识符,点语法和方括号语法都可以访问
console.log(obj.num) // 6
console.log(obj['num']) // 6
//0*不属于合法的标识符,使用点语法访问属性会报错
console.log(obj.0*) // 报错
//不符合语法标识符的属性,可以使用方括号语法访问
console.log(obj['0*'])// juejin
(2).使用变量或者常量保存属性名时,只能使用方括号语法,不能使用点语法。
const obj = {
"num": 6,
"0*":"juejin"
}
//定义一个常量property,值为num
const property = "num"
console.log(obj[property]) // 6
//当属性为变量或常量时,如果通过点语法,会将property看做字符串,表示访问obj对象下的property属性,而不是访问obj下的num属性,而obj对象中没有property属性,所以返回结果为undefined
console.log(obj.property) // undefined
2.合法标识符
1)、第一个字符必须是字母、下划线或者美元符号;2)、标识符不能与JavaScript中的其他关键字同名;3)、标识符中的其他字符可以由字母、下划线、美元符号和数字组成。
*/
let obj ={
'(':')',
'{':'}',
'[':']'
}
let arr=[];
for(const char of s){
if(obj[char]){ //不可以是obj.char
arr.push(char);
}else {
if(char !== obj[arr.pop()]) return false;
}
}
return !arr.length;
};