 					continue
 
 				internalProp = getInternalProperty prop
+				objPropVal = if internalProp or obj then obj[internalProp] else obj[prop]
 
 				if val of ATTR_PRIMITIVE_VALUES
 					val = ATTR_PRIMITIVE_VALUES[val]
 
-				propType = typeof obj[prop]
+				propType = typeof objPropVal
 				if propType is 'object'
-					propType = typeof obj[prop]?.valueOf()
+					propType = typeof objPropVal?.valueOf()
 				switch propType
 					when 'number'
 						baseVal = val
-						val = parseFloat val
+						if typeof val isnt 'number'
+							val = parseFloat val
 						if isNaN(val) and baseVal isnt 'NaN'
 							val = baseVal
 					when 'boolean'
 						val = !!val
 					when 'string'
-						val = val+''
-
-				if typeof obj[prop] is 'function' and typeof val is 'function'
+						if val?
+							val = val+''
+						else
+							val = ''
+
+				if typeof val is 'function' and typeof obj[prop] is 'function'
 					obj[prop] val
 					@attrListeners.push obj, prop, val
 				else

			item

	updateText: ->
		if @waiting or @children.length
			return

		obj = @getTextObject()

					if style.node isnt tmpNode
						item = item._parent

				unless tmpNode.name in ['neft:blank', 'neft:fragment', 'neft:use']
					tmpNode._documentStyle ||= @

				if item
					@item.parent = item
