#####Javascript学习 Javascript 有五种原始类型 boolean(值为true,false),number(任何整形和浮点数值),sring(字符串),null(空类型),undefined(未定义)。
javascript原始类型的变量直接保存原始值(而不是一个指向对象的指针).当你将原始值赋值给一个变量的时候,该值也被复制到变量中.
举个栗子:
var cloth = 'nike';var cloth1 = cloth;console.log(cloth); //nikeconsole.log(cloth1); //nikecloth = 'adidas';console.log(cloth) //adidasconsole.log(cloth1); //nike
鉴别原始类型的最佳方法是使用typeof
操作符
举个例子:console.log(typeof "Nike")
//nike
当你运行console.log(typeof null)
会返回object,可以认为null是一个空的对象的指针。
判断一个值是否为空类型的最佳方法还是直接和null
比较 console.log(value === null)
使用===
的益处是在进行比较时不会将变量强制转换为另一种类型
原始方法:
var name = "Nike";//转换为小写var lowercasename = name.toLocaleLowerCase();console.log(lowercasename); //nike//获取第一个字符var firstLetter = name.charAt(0);console.log(firstLetter); //N//将数字精确到小数点后n位var count = 10;count = count.toFixed(2);console.log(count); // 10.00
javascript 创建对象
var object = new Object();var object1 = object1;
当一个对象赋值给变量,实际是赋值给这个变量一个指针,将一个变量赋值给另一个变量时,两个变量各获得一份指针的拷贝,指向内存的同一个对象.
#####对象的引用解除&赋值 Javascript语言有垃圾收集功能,将对象指向null
既解除引用 object = null
,赋值object.name='nike',console.log(object.name)//nike
#####内建模型实例化 javascript 具有6种内建对象,Array(数组类型),Date(日期和时间累类型),Error(运行期错误类型),Function(函数类型),Object(通用对象类型),RegExp(正则表达式类型)
var items = new Array(); console.log(items); var now = new Date(); console.log(now); var error = new Error("something is happened"); console.error(error); var func = new Function("asd"); console.log(func); var obj = new Object(); console.log(obj); var re = new RegExp("\\d+");
#####定义一个函数
function reflect(value){ return value;}上面的定义函数的方式和下面定义函数的方式相同,作用是将任何传给函数的参数返回var reflect = new Function("value","return value;");
#####访问属性 属性是对象中保存名字和值得配对,点号是javaScript访问属性最通用的做法.
var array = [];array.push(12345);//is the same as var array = [];array["push"](12345);//is the same asvar array = [];var method = "push"array[method](12345);
#####鉴别类型 函数是最容易鉴别的类型,因为对函数使用typeof
操作符时,返回值是function
,对非函数的引用类型,typeof
都会返回object
,所以需要使用insteadof
来鉴别引用类型,insteadof
操作符可鉴别继承类型,这意味着所有对象都是object
实例,所有引用都继承至object
的实例
当你给一个创建的变量增加属性的时候
var name = 'nike'; name.type = true;当你打印name属性的时候,不会把.属性打印出来的javascript实际进行的操作:var name = 'nike';var temp = new String(name);temp.type= true;temp = null; //销毁对象console.log(name);
手动创建的原始封装类型,实际会创建一个object
,另外:
var found = new Boolean(false);if(found){ console.log("print sth");}
打印这句话是会执行的,因为一个对象在条件判断语句,总被认为是true
,无论对象的值等不等于false
####函数 函数声明有两种形式:
第一种是函数声明:
function add(num1,num2){return num1 + num2;}
第二种是函数表达式(匿名函数)
var add = function(num1,num2){return num1+ num2;}
虽然这两种形式较为相似,但是他们有重要的区别,函数声明会被提升至上下文,意味着你可以先使用函数后声明函数
var result = add(5,5);function add(num1,num2){return num1+num2;}
#####排序
var numbers = [1,3,5,2,3,51,6,23]; numbers.sort(function(first,second){ return first - second; }); console.log(numbers); //已经被正确排序 numbers.sort(); console.log(numbers);//未被正确排序,因为默认的比较函数是将所有的值转换成字符串进行比较
#####参数 javascript函数的另一个独特之处,可以给函数传递任意数量的参数却不造成错误.
function reflect(){ return value;}console.log(reflect("HELLO"));console.log(reflect("WORLD",24));//求和 function sum(){ var result = 0; var i = 0; len = arguments.length; while(i
#####重载
javascript 不存在自然重载
function message(){ console.log("this is an example"); } function message(mes){ console.log("this is an example too"); } message(); // this is an example too
实际上javascript是这样执行的
var say = new Function("message","console.log("1")");var say = new Function("console.log("2");");say("3"); // 2
想要使用javascript的重载机制,可以通过上述的arguments
来判断
function say(){ if(arguments.length === 0 ){ console.log("having arguments"); }else{ console.log("no arguments"); } }
######this对象 可以用三种方法来改变this
,(1)call
,(2),apply
,(3)bind
(1)call
第一个参数指定了函数执行时的值,其余的是传入的参数 (2)apply
,传入两个值,this
的值和其余数组 (3)bind
可同时传入this
&参数,或者传入this
&调用参数
function sayNameForAll(label){ console.log(label + ":"+this.name)}var name = "nike"; var person = { name:'adidas' } //使用call 方法更改this 对象 sayNameForAll.call(this,"global"); sayNameForAll.call(person,"adidas"); //使用apply更改this 对象 sayNameForAll.apply(this,["test"]); sayNameForAll.apply(person,["test"]); //使用bind方法更改this对象 (1) var data = sayNameForAll.bind(person); data("person"); //使用bind方法更改this对象 (1) var data = sayNameForAll.bind(person,"person"); data();