两者都是rxjs中的Observable对象,同时也是Observer对象,但是也有些细微区别。Subject 没有初始值,在订阅的时候不会触发。BehaviorSubject有初始值,订阅的时候会马上触发。
例如:
import { BehaviorSubject, Subject } from 'rxjs';
public a = new BehaviorSubject<number>(1);
public b = new Subject<number>();
a.subscribe(x=> { console.log(`a: ${x}`); });
b.subscribe(x=> { console.log(`b:${x}`); });
a.next(2);
b.next(2);
输出为
a:1 //初始值
a:2
b:2
除了Subject 和 BehaviorSubject, rxjs还有ReplaySubject,AsyncSubject,具体可参考https://rxjs.dev/guide/subject