快速学习 javascript

时间:2023-03-09 09:19:32
快速学习 javascript
// js 6种数据类型:字符串、数值、布尔值、undefined、null、object
// 三种非数字的数字类型:Infinity -Infinity NaN
var str = "Hello,world" //string
var i = 10 //number
var f = 2.3 //number
var b = true //boolean
var leftShift = 1 << 2
// 一些容易忘记的东西
// 1.string 是可以用 < > 比较的
var str1 = 'hello'
var str2 = 'world'
// 2. == 会进行类型转换后在比较 ,=== 相当于 equals
// null == underfined underfined派生自null 所以类型转换后 比较为true
// null === underfined false null相当于程序级别,underfined相当于系统级别
// 3.优先级怪像
// 13 + !0 = 14 "13" + !0 = "13true"
// 常用的工具
// "This is a string".charAt(0)
// "Hello world".substring(0,5) Hello
// "Hello".length
// 真值就是除了假值 false null underfined NaN "" 0
// 数组是可变的
var myArray = ["Hello",45,true]
myArray.push(null)
// KV无序集合
// 如果呢 key 本身是 identifier 那就不需要引号来引了
var myObj = {key1:'Hello',key2:'World'}
// 任何情况都建议使用 [] 访问属性
var key = myObj['key1']
// 利用短路原则可以做出 default 值效果
var othername = null //意思一下给个 程序级别的null值
var name = othername || 'default' ;
// 一种情况下省略 分号 是不好的,就是 return 语句
// return 语句将被自动插上 ; 导致返回 underfined
// Node 和 browser 提供了工具
// setTimeout() 异步 = 消息 = 通讯
// 同步 = 事件 = 计算
// 灰常重要的作用域问题,javascript 函数是有作用域但是 {} 不代表有作用域
// 这意味着 在 {} 里面声明局部变量,在 {} 外部可以访问 【只有函数作用域】
// 【立即执行匿名函数模式】防止局部变量扩散到全局作用域
(function(){
var temp = 5;
global.permanent = 10;
})()
// 【闭包】内部函数有访问外部函数变量的能力
var foo = (function(){
var password;
return {
getPassword:function(){
return password;
},
setPassword:function(value){
password = value;
}
};
}());
foo.setPassword('123456')
// this 可以访问 对象上下文【绑定的 key】
// 离开这个对象上下文 把函数暴露出去,相当于函数被扔出去了
// 所以 无法访问 得到就是系统级别的 underfined
// 换种思路 那么只要在这个 对象上下文 就可以访问了
var myObj = {
myFunc: function(){
return this.myString;
},
myString: "Hello world!",
};
// myObj.myFunc(); // = "Hello world!"
// 【只要在对象上下文】 我们写个函数用this就能访问到了
var myOtherFunc = function(){
return this.myString.toUpperCase();
}
// ①
myObj.myOtherFunc = myOtherFunc
// 甚至【指定对象上下文】 apply和call区别就是形参不一样
// 这样就有三种方式不在定义里面 实现访问对象绑定的key了。
// ②、③
myOtherFunc.call(myObj, " And Hello Moon!");
myOtherFunc.apply(myObj, [" And Hello Sun!"]);
// 【借助指定对象上下文】 apply 也是一个强大的工具
// 这种情况 Math.min 没办法接受一个 Array
var minVal = Math.min.apply(Math,[43,2,78])
// 【直接绑定到对象上下文】
// 赋值给变量 实现可重用
var okFunc = myOtherFunc.bind(myObj)
// 柯里化 curry?直观上是把函数(模板)其中部分形参 固定成常量
// 就有了一个新的函数?【bind也是要传入一个对象上下文】
var product = function(a,b){return a*b }
var doubler = product.bind(this,2) // function(b){b*2}
// new 关键字 对应【构造函数】
var MyConstructor = function(){
this.myNumber = 5;
}
var myNewObj = new MyConstructor() //{myNumber:5}
// ========【原型】========
// 每一个js对象都有一个原型
// 在访问没有定义属性的对象,解释器会去寻找对象原型
// __proto__ 是唯一能够直接修改原型影响到所有对象的方法
// 间接的标准方法有两种
// ① 通用 使用构造函数的属性 prototype (仍然是动态的)
MyConstructor.prototype = {
myNumber:5,
getMyNumber:function(){
return this.myNumber;
}
};
// ② ES5还是ES6 因为有ES3这个东西 以下是新的
// var yourObj = Object.create(原型) (并没有深拷贝)
// 【利用原型可以给基本类型添加方法】
// String是string的包装类型 Number是number的包装类型
// ===强比较会去比较基本类型和引用类型 所以两者强比较会是false
String.prototype.firstCharacter = function(){
return this.charAt(0)
}
// 通过这种方法可以让老浏览器也能用上Object.create
if (Object.create === undefined){
Object.create = function(proto){
var Constructor = function(){}
Constructor.prototype = proto
return new Constructor()
}
}
学习的话 从这里开始,安装node环境,控制台打印就可以了
…………………………………………………………………………………………………………………………………………………………………………………………………………
console.log("abc".firstCharacter())

快速学习 javascript

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();
instance.getSuperValue(); // true