number, math, string 객체
빠른것보다 읽기 좋은게 좋다
전역객체의 isInteger, inNaN, isFinite ==
number객체의 isInteger, inNaN, isFinite ===
number.isNaN을 쓰라고 es린트에서 에러남
function alphaString46(s){
if (!s) return false;
return (s.length => 4 && s.length <=6) && !isnan(s);
}
-> s는 현재 undefined라, 에러
전역,빌트인 함수들이 성능등이 좋다 의심하지말자 - 카피해서 만들어도 최적화가 안됨
console.log(typeof Object); 찍어보면 / function
객체의 기본형은 결국 '함수'다
const o = new object(); //빈객체를 만드는 흔한것. 유용하진않다
o.getprototypeof() 하고싶었는데
프로토타입에 체인에 없어
object.getPrototypeOf(o); 이렇게 써야됬어
함수 객체가 가지고 있는 메소드가 있더라
this를 쓰는 메소드 (prototype메소드) this를 안쓰는 메소드(스테틱메소드로 쓰는것을 추천한다)
object.create라는 게 있더라 (object 정적메소드) 객체를 만드는 방법중 1개
프로토타입을 지정하면서 객체를 만듬
const parent = {a : 1};
const child = {};
const child = object.create(parent); //객체를 만드는데, 프로토타입으로 해서 객체를 만들어라 console.log(child); // {}
console.log(child.a); // 1
const o = Object.create(null); //무슨의미 일까? 프로토타입을 널로해라 프로토타입의 종점인 객체를만들어라
홀로 존재해
var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar");
hasOwnProperty를 호출하는데 (프로토타입 메소드) foo로 this를 갈아낀다
this는 object.prototype .앞에 애를 foo로갈아낀다
foo.hasOwnProperty 가 된다.
이렇게하는 이유는
Object.prototype은 언제나 있다 함수는 일단 있는상태에서 호출
number는 정적메소드와 , 프로토타입이 붙은 메소드를 갖고있다
->프로토타입이 붙어있는 함수는 생성자 함수야
Math는 전부 정적메소드이다 (생성자가 없다= 인스턴스가 없다 = 다 정적이다)
->정적메소드는 this를 안쓴다
max를 쓴다치면 첫번째 인자로 아무거나 줘도된다 this를 안쓰니까
Math.max(1, 2, 3) 사용법 제일큰것반환
Math.min(1,2,3) 제일 작은건데
근데, 가진 자료형이 배열이야 배열을 어떻게 풀지?
[1,2,3] 배열 - > 1,2,3 [없다]
근데 apply함수는 (this, 배열) 호출할 함수에 전달할 리스트
call 함수는 (this, 리스트)
이터러블 = 순회할 수 있냐 없냐
배열의 메소드(대표적인것 19개)는 잘 다뤄야 한다
배열의 메소드 vs 고차함수의 메소드차이는 (콜백이 있다없다)
배열은 0개 이상의 컴마로 구분한것
특징 length를 치면 요소의 개수를 반환해준다
객체나 배열에서 없는 프로퍼티, 인덱스를 찾으면 undefined이다
일반적으로,다른언어에선 배열의 요소들의 데이터 타입이 같아야한다
배열의 요소로 배열을 가지고 있다(이중배열)
array생성자 함수를 써야할떄( 요소 결정x 자리만 필요할때)
타언어와 배열의 구조가 다르다(배열 흉내를냄)
특징(희소배열)
배열을 지울때
delete() 값만 지운다 금지
splice 값과 자리까지 지운다
for in문 (객체들을 순회할때)
단점:객체의 프로퍼티를 순회할때
대체하기위해 for of문나옴 (활용도 낮음)
for ( const item of 이터러블(배열,등등))
Array의 프로퍼티 length (요소의 개수) 딱 1개
희소배열(다른언어의 배열을 비슷하게 만들어놓음 성능이 안좋음)
주의할점
*.repeat(4)를 해도, *은 잠깐 변경되지만 사실은 .앞에있는 this들은 변하지 않는다(이뮤터블)
array는 객체
const arr = [];
arr.push(1); - 원본 배열이 변경되었다 - 어떤배열은 사본을 만들어서 리턴한다
가급적 안바꾸는쪽으로 쓰는게 좋음
indexof(주는 요소가 몇번째 인덱스냐)없으면 -1
// 모든 요소를 반환 (= 복사본 생성) res = items.slice(); console.log(res); // [ 'a', 'b', 'c' ]
var arr = Array.prototype.slice.call(arguments);
call(this) 나마찬가지
slice 입장에선 array.prototype이 this
argument가 slice에 전달되서 this를 갈아낌
그다음 동작하고 this를 복사하고 리턴