// 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())

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

快速学习 javascript的更多相关文章

  1. 十大免费教程资源帮助新手快速学习JavaScript

    “JavaScript”的名头相信大家肯定是耳熟能详,但只有一小部分人群了解它的使用与应用程序构建方式.这“一小部分”人指的当然是技术过硬的有为青年.网络程序员以及IT专业人员.但对于一位新手或者说外 ...

  2. 零基础:如何快速学习JavaScript,html+css技术

    前端开发要学的知识内容涉及的会很宽泛,虽然说主要是HTML.CSS和JavaScript这些基础知识点,但达妹今天想强调一下,学前端开发除了要学这些基础知识外,学员还要在这之上进行延伸和深入的去学,而 ...

  3. 快速学习JavaScript面向对象编程

    到处都是属性.方法,代码极其难懂,天哪,我的程序员,你究竟在做什么?仔细看看这篇指南,让我们一起写出优雅的面向对象的JavaScript代码吧! 作为一个开发者,能否写出优雅的代码对于你的职业生涯至关 ...

  4. 快速学习javascript对象-遍历对象

    为了方便了解每个javascript对象包含的方法,我写一个函数. function GetCollection(obj){ try{ if(obj){ var sType=""; ...

  5. 如何快速检查js语法学习Javascript

    这里给大家推荐一个快速进行语法检查的方法,可以发现绝大多数语法错误,也可以作为在线编辑器,提高编程效率. 地址:http://www.jslint.com/ 同时推荐一个在线学习Javascript的 ...

  6. 如何从源码中学习javascript

    艾伦说啊,学习javascript,必须要学会看源码,通过高手的源码,你可以从中吸取很多书本上难以看到的技巧. 看源码就好像喝鸡汤,所有的营养都在这汤里了.这汤就是源码,高手写的源码,就是最好的鸡汤. ...

  7. 更快学习 JavaScript 的 6 个思维技巧

    更快学习 JavaScript 的 6 个思维技巧 我们在学习JavaScript,或其他任何编码技能的时候,往往是因为这些拦路虎而裹足不前: 有些概念可能会造成混淆,尤其当你是从其他语言转过来的时候 ...

  8. 如何正确学习JavaScript

    不要这样学习JavaScript 不要一开始就埋头在成堆的JavaScript在线教程里 ,这是最糟糕的学习方法.或许在看过无数个教程后会有点成效,但这样不分层次结构地学习一个东西实在是十分低效,在实 ...

  9. 「译」如何正确学习JavaScript

    原文:How to Learn JavaScript Properly 目录 不要这样学习JavaScript 本课程资源 1-2周(简介,数据类型,表达式和操作符) 3~4周(对象,数组,函数,DO ...

随机推荐

  1. luogu3811 乘法逆元

    逆元定义:若a*x=1(mod p),(a,p互质),则x为a mod p意义下的逆元 做法见https://www.luogu.org/blog/zjp-shadow/cheng-fa-ni-yua ...

  2. nginx日志文件的定时切割与归纳

    应用环境:生产环境中的Nginx服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率.同时,为了 方便对日志进行分析计算,须要对日志文件进行定时切割.定时切割的方式有按月切割.按天切割 ...

  3. wildfly tomcat 服务器不响应 不返回 死住了 查看tcp CLOSE_WAIT 暴多

    I'm also having the same issue with a very latest Tomcat server (7.0.40). It goes non-responsive onc ...

  4. Java面试题-基础知识

    参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...

  5. poj1193 内存分配

    气死我了...这个毒瘤内存分配..... 优先队列 + 链表模拟,看起来搞一搞就好了却WA来WA去... 最后对拍手动找才发现错误: erase的时候不要急急忙忙插入wait!要把同一时期的erase ...

  6. A1144. The Missing Number

    Given N integers, you are supposed to find the smallest positive integer that is NOT in the given li ...

  7. 在vue中使用import()来代替require.ensure()实现代码打包分离

    最近看到一种router的写法 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const login = ...

  8. anaconda的安装教程和使用方法

    一.anaconda安装方法: 1.下载: anaconda官方下载地址:https://www.anaconda.com/download/ 2.安装: 可以自己指定路劲,也可以选择默认安装,最后记 ...

  9. Can not issue data manipulation statements with executeQuery()错误解决

    转: Can not issue data manipulation statements with executeQuery()错误解决 2012年03月27日 15:47:52 katalya 阅 ...

  10. pytest 7 assert断言

    前言:断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义了. 断言用到的是 assert关键字.之前的介绍,有的测试方法中其实用到了assert断言.简单的来说,就是预期的结果去和实际 ...