• javascript引用类型


    1:创建对象的方式:new和对象字面量

    var finn=new Object();finn.name="fiona";finn.toString()
    "[object Object]"
    var finn={};finn.name="fiona";finn.toString()
    "[object Object]"

    2:在使用对象字面量语法时,属性名也可以使用字符串

    var person={name:"finn",age:30};person.name
    "finn"
    var person={"name":"finn","age":30};person.name
    "finn"

    3:在通过对象字面量定义对象时,实际上不会调用Object构造函数,Firefox2及更早版本会调用

    4:对象字面量是向函数传递大量可选参数的首选方式。最好做法:对必需值使用命名参数,使用对象字面量封装多个可选参数

    function person(obj)
    {
    if(typeof obj.name=="number")
    console.log(obj.name);
    };
    person({name:1,age:2})
    VM813:5 1

    5:访问对象属性两种非法:点表示法和方括号表示法,方括号表示法优点可以通过变量访问属性.如果属性名中包含会导致语法错误的字符,或者属性名使用的关键字或保留字,也可以使用方括号表示法

    var person={name:"fiona"};person["name"]
    "fiona"
    var person={name:"fiona"};person.name
    "fiona"

    6:对象字面量中,左花括号就表示的是一个表达式的开始,而不是一个语句块的开始。

    为什么要 eval这里要添加 “("("+data+")");//”呢?

    原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

    加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始 和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
    alert(eval("{}"); // return undefined
    alert(eval("({})");// return object[Object]

    对于这种写法,在JS中,可以到处看到。

    如: (function()) {}();  做闭包操作时等。

    var person="{age:1}";var x=eval('('+person+')');x.age
    1
    var person="{'age':1}";var x=eval('('+person+')');x.age
    1
    var person="{'age':'1'}";var x=eval('('+person+')');x.age
    "1"
    var person="{"age":1}";var x=eval('('+person+')');x.age
    1
    var person="{"age":1,friend:{age:2}}";var x=eval('('+person+')');x.age
    1
    var person="{"age":1,friend:{age:2}}";var x=eval('('+person+')');x.friend.age
    2

    7:函数立即执行

    var x=function xx() {console.log(2);}()
    VM1192:2 2
    undefined
    function xx() {console.log(2);}()
    VM1220:2 Uncaught SyntaxError: Unexpected token )
    (function xx() {console.log(2);}())
    VM1227:2 2
    undefined
    (function xx() {console.log(2);})()
    VM1231:2 2
    undefined

     8:()是一个分组操作符,它的内部只能包含表达式

    9:Array:可以保存任何类型的数据;大小可以动态调整;创建方法new和数组字面量;可以省略new;length非只读

    var colors=new Array("10",1,new Object());colors[0]
    "10"
    var colors=Array(2);colors[0]
    undefined
    var colors=Array("2");colors[0]
    "2"
    var colors=[];colors[0]
    undefined
    var colors=[];colors[1]
    undefined
    var colors=[];colors[2]
    undefined
    var colors=[];alert(colors[2])
    undefined
    var colors=[1,2,3];alert(colors[2])
    undefined
    var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);
    undefined

    9.1:检测数组

    var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);colors instanceof Array
    true

    var colors=[1,2,3];alert(colors[2]);colors.length=2;alert(colors[2]);colors instanceof Array;Array.isArray(colors);
    true

    function xx (){console.log(Array.isArray(arguments));};xx()
    VM2211:2 false

    function xx (){console.log(Array.isArray(arguments));console.log(arguments[0])};xx(1)
    VM2212:2 false
    VM2212:2 1

    9.2: 转换方法:toString(),valueOf(),join

    var finn=["a","b",{}];finn.toString();
    "a,b,[object Object]"
    {}
    undefined
    ({})
    Object {}
    alert({})
    undefined
    finn.valueOf()
    ["a", "b", Object]
    finn[3]=1
    1
    finn.toString()
    "a,b,[object Object],1"
    finn.valueOf()
    ["a", "b", Object, 1]
    finn.join("|")
    "a|b|[object Object]|1"

  • 相关阅读:
    【转帖】android线程知识整理
    Andorid开发笔记
    Flex 4.6 手机项目第一次开发小记
    memory point
    两个sql server 2000的通用分页存储过程
    网页通用视频播放(asp.net2.0原作)
    c#操作XML常用方法
    也说项目开发经验
    SQL Server各种日期计算方法
    Server.Transfer()方法在页间传值
  • 原文地址:https://www.cnblogs.com/syf/p/4321289.html
Copyright © 2020-2023  润新知