//4. 문자열 내 p와 y의 개수
//numPY함수는 대문자와 소문자가 섞여있는 문자열 s를 매개변수로 입력받는다.
// 대소문자를 구별하지 않으며 s에 ‘p’의 개수와 ‘y’의 갯수를 비교해 같으면 true,
// 다르면 false를 리턴하도록 함수를 완성하라. ‘p’, ‘y’ 모두 하나도 없는 경우는 항상 true를 리턴한다. \
// 예를들어 s가 ‘pPoooyY’면 true를 리턴하고 ‘Pyy’라면 false를 리턴한다.
function numPY(s) {
// 인수값이 없으면 true를 반환한다.
if (s === undefined) return true;
// 하나도없으면 true 리턴한다.
// p,y를 대소문자 상관없이 찾아낸다.
var findP = /p/ig;
var findY = /y/ig;
// 배열화한다.
var P = (s.match(findP) || []).length;
var Y = (s.match(findY) || []).length;
return P === Y ? true : false ;
// return P.length === Y.length ? true : false ;
}
console.log('\n4번문제')
console.log(numPY('pPoooyY')); // true
var Y = (s.match(findP) || []).length;
이부분에서 논리합연산자앞이 falsy 하면 뒤에가 실행되는거잔아
이경우에는 배열이아니엿던(object)게 배열이됫는데
어떤이유로 배열이된거임?
//numPY함수는 대문자와 소문자가 섞여있는 문자열 s를 매개변수로 입력받는다.
// 대소문자를 구별하지 않으며 s에 ‘p’의 개수와 ‘y’의 갯수를 비교해 같으면 true,
// 다르면 false를 리턴하도록 함수를 완성하라. ‘p’, ‘y’ 모두 하나도 없는 경우는 항상 true를 리턴한다. \
// 예를들어 s가 ‘pPoooyY’면 true를 리턴하고 ‘Pyy’라면 false를 리턴한다.
function numPY(s) {
// 인수값이 없으면 true를 반환한다.
if (s === undefined) return true;
// 하나도없으면 true 리턴한다.
// p,y를 대소문자 상관없이 찾아낸다.
var findP = /p/ig;
var findY = /y/ig;
// 배열화한다.
var P = (s.match(findP) || []).length;
var Y = (s.match(findY) || []).length;
return P === Y ? true : false ;
// return P.length === Y.length ? true : false ;
}
console.log('\n4번문제')
console.log(numPY('pPoooyY')); // true
var Y = (s.match(findP) || []).length;
이부분에서 논리합연산자앞이 falsy 하면 뒤에가 실행되는거잔아
이경우에는 배열이아니엿던(object)게 배열이됫는데
어떤이유로 배열이된거임?
- dc official App
뭔 말인지 나만 이해가 안가는거니? 다시 설명해볼래?
String.prototype.match의 반환값은 Array나 null(falsy)이 맞는데?
그러면 P.length 가 에러가 나오면 안되는데 나오더라구요
저 초기화방법 쓰기전에는 P의 타입이 object던데...
원시 타입을 제외한 모든 타입은 자바스크립트에서 객체에요 ㅎㅎ
그래서 typeof [] 하면 "object"가 나옵니당 ㅎㅎ
타입을 비교할 때는 type.constructor같은 걸 이용하거나 ducktype 을 하는게 좋아요 ㅎ
item => item === null || item === undefined ? item : item.constructor.name
간단한 타입 비교 함수입니당
var P = (s.match(findP)).length; var Y = (s.match(findY)).length;
var P = (s.match(findP)).length; ^ TypeError: Cannot read property 'length' of null
저 부분을 저렇게 바꾸면 왜 타입에러가 나는걸까여?
배열에도 length를 쓸수 잇지않나요?
String.prototype.match 메서드는 매칭되는 문자가 하나도 없을 떄는 null을 반환해서
그래여
'p' 매칭되는데용?
null과 undefined는 래퍼 객체로 만들어도 내용물이 없거든여
테스트 한 코드 줘보세여ㅑ
https://jsfiddle.net/sur5bosg/1/
근데 내가 궁금한건 (s.match(findP) || []).length;
|| [] 이부분...
일단, p가 매칭되는 게 아니라 ab매칭 후에 중간에 팅겨버리는거고
아!!!!!!!!!!!!!! 이해함 매칭되는게없으면 내용물이없어서 length 할것도 없어진거고
연산자로 빈배열 넣어주면 length가 0되서 에러안나는거고
그쳐 :)