js高距離読書ノート
32794 ワード
3.4は、基本タイプの値に属性を追加することはできませんが、 基本型値を一つの変数から他の変数にコピーすると、二つの変数のいずれかの動作は相互に影響しません.一方の変数から他の変数に参照タイプ値をコピーすると、一つの変数が変化し、他の変数解決方法に影響を与えます. は、オブジェクトが空かどうか判断する .伝達パラメータは値によってしか伝達できません.このオブジェクトが値によって伝達されても、参照によって同じオブジェクト にアクセスします.実行環境及びスコープの先端は、常に現在実行されているコード所在環境の変数オブジェクトである.この環境が関数である場合、そのアクティブオブジェクトを変数オブジェクトとします.識別子解析は、スコープのレベル1に沿って識別子を検索するプロセスである. ドメインチェーンtry-catch文を拡張するcatchブロックwith文 ブロックレベル機能領域がない ごみ収集 タグクリア 参照カウント objectタイプ Arayタイプ Dateタイプ Functionタイプ 基本包装タイプ文字列: Booleanタイプ Numberタイプ String Math方法 理解対象 工場モデル コンストラクションモード プロトタイプモデル 組み合わせは、構造関数とプロトタイプモード を使用する.ダイナミックプロトタイプ 寄生構造関数モード コンストラクタモード プロトタイプチェーン 構築関数を借りる グループの後継者は2回のスーパークラス を呼び出します.プロトタイプは を継承します.寄生式引継ぎ 寄生結合式継承
var a=new String('ddd')
a.name='lee'
console.log(a.name)//'lee'
var clone = function(myObj){
if(typeof(myObj) != 'object') return myObj;
if(myObj == null) return myObj;
var myNewObj = new Object();
for(var i in myObj){
myNewObj[i] = clone(myObj[i]);
}
return myNewObj;
};
//
function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf=Array.prototype.slice.call(Obj)
return buf;
} else if (Obj instanceof Object){
buf = {}; //
for (var k in Obj) { //
buf[k] = clone(Obj[k]);
}
return buf;
}else{
return Obj;
}
}
// :
Array.prototype.clone=function(){
return this.slice(0);
}
var isEmptyObj=function(obj){
for(var name in obj){
return false
}
return true
};//
function setName(obj){
obj.name='nicholas'
obj=new Object()// ,
obj.name='greg'
}
var person=new Object()
setName()
alert(person.name)//'nicholas'
var person={
'name':'lelele'
}
var proname='name'
console.log(person[proname])// person.proname
var colors=new Array()
var colors=[]
var colors=Array()// ,
検出配列:typeof []; // "object"
[] instanceof Array; // true
typeof [] == "object" && [].constructor == Array;
Object.prototype.toString.call(arr) === "[object Array]";
var colors=[1,2,3]
colors.toString()//'1,2,3'
colors.valueOf()//'1,2,3'
colors//'1,2,3'
:
var color=['red','blue']
var count=color.push('yellow')//2
var item=color.pop()//‘yellow’
unshift shift
:
var values=[0,1,5,10,15]
values.reverse()//5,4,3,2,1
values.sort()//0,1,10,15,5
function compare(){
if(value1return -1
}else if(value1>value2){
return 1
}else{
return 0
}
}
values.sort(compare)
:
concat
splice
slice
indexOf() ===
var person={name:'nicholas'}
var people=[{name:'nicholas'}]
people.indexOf(person)//-1
every true, true
filter true
forEach ,
map() ,
some() true true
reduce(function(prev,cur,index,array){}[, ])
reduceRight
var dat=new Date(this.date);
dat.setDate(1);
dat.setDate(dat.getDate()-dat.getDay());
for(var i=0;i<42;i++){
var single=$('span').eq(i+7);
single.html(dat.getDate());
if(dat.getMonth()!==this.date.getMonth()){
single.css({color:'lightgray'});
}else if(dat.getDate()===this.date.getDate()){
this.currentDate=single;//
single.css({color:'#fff',background:'#c81b01'});
}else if(dat.getDay()===0||dat.getDay()===6){
single.css({color:'#c81b01'});
}else{
single.css({color:'black'});
}
dat.setDate(dat.getDate()+1);
}
function sum(num1,num2){
return num1+num2
}
alert(sum(10,10))//20
var anotherSum=sum
alert(anotherSum(10,10))//20
sum=null
alert(anotherSum(10,10))//20
function outer(){
inner()
}
function inner(){
alert(arguments.callee.caller)//
}
outer()
Array.prototype.slice.call(arguments)//
call、appy、bindの違い
var s1='some text'
var s2=s1.substring(2)
alert(s1)//
var obj=new Object('some text')
alert(obj instanceof String)//true
var value='25'
var number=Number(value)
alert(typeof number)
var obj=new Number(value)
alert(typeof obj)
alert(obj instanceof Number)//true
var falseObject=new Boolean(false)//
var result=falseObject&&true
alert(result)//true
var falseValue=false;
result =falseValue&&true
alert(result//false)
var num=10
num.toString(16)//'a'
var num=10.005
num.toFixed(2)//10.01
var num=10.004
num.toFixed(2)//10.00
var num=10
num.toExponential(1)//1.0e+1
var num=100
num.toPrecision(1)//1e+2
num.toPrecision(2)//99
num.toPrecision(3)//99.0
var numberObject=new Number(10)
var numberValue=10
alert(typeof numberObject)//'object'
alert(typeof numberValue)//'number'
alert(numberObject instanceof Number)//true
alert(numberValue instanceof Number)//false
concat('','')
slice()
substring()// 0
substr(m,n( ))
trim()
function trim(str){ //
return str.replace(/(^\s*)|(\s*$)/g, "");
}
function ltrim(str){ //
return str.replace(/(^\s*)/g,"");
}
function rtrim(str){ //
return str.replace(/(\s*$)/g,"");
}
eval()eval(‘function sayHi(){alert(‘hi’)})は変数が存在しません.厳格なモードでは、外部はeval()が作成した変数や関数にアクセスできません. Math.max(3,5,32,65)
Math.min()
Math.ceil()
Math.round()
Math.floor()
Math.random()//[0,1)
return Math.random()<.5?1:-1;
var person={}
Object.defineProperty(person,'some',{
writable:false,
value:'nick'
})
var person={
name:'ddd'
}
Object.defineProperty(person,'sex',{
get:function(){
return this.name
},
set:function(val){
this.name=val
}
})
オブジェクトを作成 function createPerson(name,age,job){
var o=new Object()
o.name=name
o.age=age
o.job=job
o.sayName=function(){
alert(this.name)
}
return o
}
var person1=createPerson('nik',29,'doctor')
person1.sayName()
function Person(name,age,job){
this.name=name
this.age=age
this.job=job
this.sayName=function(){
alert(this.name)
}
}
var person1=new Person('nik',29,'doctor')
person1.sayName()
function Person(){
}
Person.prototype.name='le'
Person.prototype.sayName=function(){
alert(this.name)
}
var person=new Person()
person.sayName()
hasOwnProperty()
function hasPrototypeProperty(object,name){
return (!object.hasOwnProperty(name))&&(name in object)
}
// in
function Person(){
}
Person.prototype.name='nick'
Person.prototype.age=30
Person.prototype.job='doctor'
var keys=Object.keys(Person.prototype)
console.log(keys)//['name','age','job']
var p=new Person()
var m=Object.keys(p)
console.log(m)//[]
p.name='yy'
p.age=29
var n=Object.keys(p)
console.log(n)//['name','age']
for(var i in p){
console.log(i)//name age job
}
function Person(){
}
var friend=new Person()// ,
Person.prototype={
constructor:Person,
sayName:function(){
alert('ddd')
}
}
friend.sayName()
function Person(name,age,job){
this.name=name;
this.age=age
this.job=job
}
Person.prototype={
constructor:Person,
sayName:function(){
alert(this.name)
}
}
var person=new Person('ddd',55,'doctor')
function Person(name,age,job){
this.name=name
this.age=age
this.job=job
if(typeof this.sayName!='function'){
Person.prototype.sayName=function(){
alert(this.name)
}
}
}
var person=new Person('dd',55,'dd')
person.sayName()
function Person(name,age,job){
var o=new Object()
o.name=name;
o.age=age
o.job=job
o.sayName=function(){
alert(this.name)
}
return o
}
var friend = new Person('nick',55,'engineer')
friend.sayName()
function person(name,age,job){
var o new Object
o.sayName=function(){
alert(name)
}
return o
}
var friend=Person('nock',29,'ddd')
friend.sayName()
継承:function SuperType(){
this.property=true
}
SuperType.prototype.getSuperValue=function(){
return this.property
}
function SubType(){
this.subproperty=false
}
SubType.prototype=new SuperType()
SubType.prototype.getSubValue=function(){
return this.subproperty
}
var instance=new SubType()
alert(instance.getSuperValue())
alert(Object.prototype.isPrototypeOf(instance))//true
alert(SubType.prototype.isPrototypeOf(instance))//true
alert(SuperType.prototype.isPrototypeOf(instance))//true
function SuperType(){
this.colors=['red','blue','green']
}
function SubType(){
SuperType.call(this)//
}
var instance=new SubType()
var instance2=new SubType()
instance.colors.push('black')
console.log(instance2.colors)//['red','blue','green']
function SuperType(name){
this.colors=['red','blue','green']
this.name=name
}
SuperType.prototype.sayName=function(){
alert(this.name)
}
function SubType(name,age){
SuperType.call(this,name)//
this.age=age
}
SubType.prototype=new SuperType()
SubType.prototype.constructor=SubType
function object(o){
function F(){}
F.prototype=o
return new F()
}
// , Object.create()
function createAnother(original){
var clone=object(original)
clone.sayHi=function(){
alert('hi')
}
return clone
}
function inheritProperty(subType,superType){
var prototype=object(superType.prototype)
prototype.constructor=subType
subType.prototype=prototype
}
function SuperType(name){
this.name=name
this.colors=['red','blue','green']
}
SuperType.prototype.sayName=function(){
alert(this.name)
}
function SubType(name,age){
SuperType.call(this,name)
this.age=age
}
inheritProperty(SubType,SuperType)
SubType.prototype.sayAge=function(){
alert(this.age)
}
var per=new SubType('lll',29)
per.sayName()