zoukankan      html  css  js  c++  java
  • Javascript 学习记录

    不要使用传统语言(C#,JAVA)的面向对象理念去理解JS, 在ES5中没有类这个概念,虽然也有new操作符, 但完全可以不去用, function在js中是一等公民, 可以用function去做任何事情, 当然也包括创建对象,js中的编程风格是函数式编程, 在js中不需要通过new去创建对象, 这样看上去也比较奇怪,也不利于理解JS.当创建一个新对象时, 只需要说让这个新对象看上去像某个对象就OK了, 这个就是原型, 新对象是以某个对象为原型创建的, 所以新对象拥有原型对象(看上去像的对象)特征.
    那应该怎么去创建对象呢.有一种最简单的方式,对象字面量, var o = {};没错就这么简单. 刚才说一个对象要像另外一个对象那这个对象像谁呢? 没错当创建一个对象的时候这对象一定会有一个参考对象(或者叫蓝本), 这个对象(o)就是参考Object创建的, Object是js中所有对象的始祖
    JS中的对象按创建方式分为两种 : 一种是 函数对象, 一种是 通过函数对象创建的对象

    "use strict"  开启ES5的严格模式

    javascript是unicode字符集编写的, 所以天生支持unicoude, unicode转意符以u开头,后面接4个16进制数(u00e9)

    javascript区分大小写

    javascript中空格是被忽略的,可以在程序的标识之间使用任意数量的空格.  换行, 分号在不引起歧义的情况下也会被忽略掉

    数据类型
    javascript不是强类型语言,所以在给变量赋值的时候不需要指明变量的具体类型,根据其上下文的环境自动判断数据类型
    数字(number), 字符串(string), 布尔(boolean),对象(object). 前面三个是原始类型, 最后一个是对象类型, null, defined, NaN, Infinity这些是js中的特殊值
    js中的浮点数使用的是二进制表示法(IEEE-754), 该表示法, 可以精确的表示二进制分数1/2, 1/8, 1/1024,但对于我们日常使用的十进制分数无法准确的表示

    0.2-0.1=0.1
    0.3-0.2=0.09999999999999998
    0.4-0.3=0.10000000000000003
    0.5-0.4=0.09999999999999998

    对于这样的问题我们可以通过.toFixed(n)四舍五入来解决, n=0-20包括0,20 
    3种原始类型也可以属性,原因是javascript也有"装箱"和"拆箱"的过程,所以这3种类型虽然可以使用对应对象的相关属性,但类型却不是对象

    数字类型
    javascript中不分整型和浮点,一律使用浮点类型, 范围是253~2-53,但数组索引和位运算则是基于32位整数.一些复杂的算数运算我们可以通过Math来完成.

    布尔类型
    布尔值主要用于关系判断,js中的所有类型在进行关系判断的时候都会进行类型转换
    undefine, null, NaN, 0, -0, ""(空字符串) 这些类型会被转换为false, 除此以外其他的值都会被转换成true.
    用于关系判断的运算符有: ==(等于), ===(严格相等), !=(不等于), !==(不严格相等), >(大于), <(小于), >=(大于等于), <=(小于等于), in运算符, instanceof运算符

    Date是javascript的内置对象,我们通过new Date来创建日期对象

    var d = new Date(); //用当前的时间创建一个日期对象
    var d = new Date(2015,0,1);//表示2015-01-01, javascript是从0开始计算月份的
    var s = new Date(2015,0,1,0,0,0);//开始时间
    var d = new Date(2015,0,1,0,0,1);//开始时间
    d-s=1000;//时间间隔用毫秒表示
    d.getYear(); //当前年份-1900的值
    d.getFullYear();//获取年份
    d.getMonth();//获取月份, 从0开始计算, 12月得到的是11
    d.getDate();//获取天数, 从1开始计算
    d.getDay();//获取星期数,从0开始计算,星期天用0表示,国外的习惯是星期天是一个星期的开始
    d.getHours();//获取小时数(0-23), 如果写24会自动转换成第二天的0时(webkite下面测试)
    d.getMinutes();//获取分钟数(0-59)
    d.getSeconds();//获取当前秒数(0-59)

     数据类型的转换
    javascript的原始类型就3种,数字,字符,布尔类型. 这三种类型之间的转换比较简单,
    (数字, 布尔)-->(字符串):数字转换成字符串是把数字表示的值直接转换成字符串形式, 布尔转换成字符串是 "false" 和 "true",
    (数字, 字符串)-->(布尔):空字符串("",引号之间没有空格), 0 和 -0 转换成布尔为假值(false), 其他的数字和字符串都转换成真值(true), 
    (字符串, 布尔)-->(数字):所有以数字表示的字符串("12", "22")可以直接转换成对应的数字, 字符串中的开始和结束的空格会被忽略调, 对于非空,非数字开头的字符串会被转换成NaN

    强制类型转换
    parseInt, parseFloat, Boolean, Number, String后3个是内置对象的构造函数

    根据上下文环境发生的类型转换
    23+"string" ==> 转换成字符串
    "4"*"3"  ==> 转换成数字

    全局对象
    当javascript解释器启动的时候会创建一个全局对象, 并给全局对象初始化一些特定的属性

    Object.prototype.hasOwnProperty
    该API用于判断当前对象是否包含某个自身属性, 所谓自身属性是指非继承的属性, 该API可以区分那些属性是继承的属性那些是自身的属性, 自身的属性会返回true, 继承的属性返回false

    Object.prototype.isPrototypeOf
    该API用于判断一个对象是否在另一个对象的原型链上

    function Fee() {
      // . . .
    }
    
    function Fi() {
      // . . .
    }
    Fi.prototype = new Fee();
    
    function Fo() {
      // . . .
    }
    Fo.prototype = new Fi();
    
    function Fum() {
      // . . .
    }
    Fum.prototype = new Fo();
    var fum = new Fum();
    . . .
    
    if (Fi.prototype.isPrototypeOf(fum)) {
      // ...
    }

    面向对象的特性
    JS中也实现了一些面向对象的特性, 比如说对象, 继承, 多态, 因为面向对象的概念只是一个规范, 每种语言对规范的实现是不一样的. 在JS中就没有类的概念(至少在ES5之前是这样的). 如果没有类的概念, 那对象是按什么样的标准创建的呢? 在C#, C++这样的语言中
    所有的对象都能追根溯源, 最后能找到Object 这个类. 在JS中所有对象的根是NULL, 在JS中对象是通过原型链进行溯源的, 出了NULL 所有的对象都一个__proto__属性, 这个是一个未公开的属性, 这个属性告诉了我们该对象是根据那个原型创建出来的

  • 相关阅读:
    oracle实现自增id
    一些.NET 项目中经常使用的类库
    文件读取是判断是否读取到末尾
    文件操作
    第一个html文件
    HTML标签(持续更新)
    配置tomcat
    判断一个String中是否有指定字符或字符串
    去掉字符串中的某个字符
    把一个activity作为弹窗
  • 原文地址:https://www.cnblogs.com/answercard/p/5011874.html
Copyright © 2011-2022 走看看